我试图在大熊猫(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

10-07 19:19
查看更多