我试图在大熊猫(Python 2.7)中对数据框进行分组,这取决于每次不满足条件时重置的累进计数。看起来像:
date condition count
01,01,2018 08:00 A 1
01,01,2018 08:01 A 2
01,01,2018 08:03 A 3
01,01,2018 08:04 B 1
01,01,2018 08:07 B 2
01,01,2018 08:10 B 3
01,01,2018 08:13 B 4
01,01,2018 08:14 C 1
01,01,2018 08:16 C 2
01,01,2018 08:18 C 3
01,01,2018 08:20 C 4
01,01,2018 08:21 C 5
01,01,2018 08:22 A 1
01,01,2018 08:24 A 2
01,01,2018 08:25 B 1
01,01,2018 08:27 B 2
01,01,2018 08:29 B 3
01,01,2018 08:30 C 1
我试图获得:
date condition count
01,01,2018 08:00 A 3
01,01,2018 08:04 B 4
01,01,2018 08:14 C 5
01,01,2018 08:22 A 2
01,01,2018 08:25 B 3
01,01,2018 08:30 C 1
正如你所看到的,仅仅用a,b,c分组是不可能的,因为这些分组取决于条件正在改变的事实,而不是条件本身。这就是为什么我创建了count,可以帮助实现这个目的。我已经尝试过
df2=df.groupby(['condition', 'date']).where(df['count']<df['count'].shift(1)
,for
循环…但是我得到了语法错误,或者定义错误,或者键错误,或者“无法访问dataframegroupby”对象的“where”可调用属性错误,请尝试使用“apply”方法,还有许多其他的错误取决于尝试。我希望你们中的一些人能提出解决这个问题的建议,提前谢谢。
最佳答案
用(Series
)与shift
比较[Acc> ED值,然后用ne
和!=
和cumsum
聚合:
g = df['condition'].ne(df['condition'].shift()).cumsum()
d = {'date':'first', 'condition':'first','count':'last'}
df = df.reset_index().groupby(g, as_index=False).agg(d)
print (df)
date condition count
0 01,01,2018 08:00 A 3
1 01,01,2018 08:04 B 4
2 01,01,2018 08:14 C 5
3 01,01,2018 08:22 A 2
4 01,01,2018 08:25 B 3
5 01,01,2018 08:30 C 1