猿问

熊猫:根据条件计数进行分组

我试图根据每次不再满足条件时都会重置的渐进计数对Pandas(Python2.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进行分组...,因为分组取决于条件正在变化的事实,而不是条件本身。这就是为什么我创建了计数,可以在此目的中提供帮助的原因。我尝试过df2=df.groupby(['condition', 'date']).where(df['count']<df['count'].shift(1),for周期...但是出现语法,定义或键的错误,或“无法访问'DataFrameGroupBy'对象的可调用属性'where',尝试使用'apply'方法”,以及许多其他错误,尝试。


我希望你们中的一些人可以提出解决问题的方法,在此先谢谢您。


慕侠2389804
浏览 133回答 1
1回答

繁花如伊

创建助手Series与比较shiftED值由ne(!=含)cumsum,然后通过总agg用first和last: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)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;date condition&nbsp; count0&nbsp; 01,01,2018 08:00&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;A&nbsp; &nbsp; &nbsp; 31&nbsp; 01,01,2018 08:04&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;B&nbsp; &nbsp; &nbsp; 42&nbsp; 01,01,2018 08:14&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C&nbsp; &nbsp; &nbsp; 53&nbsp; 01,01,2018 08:22&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;A&nbsp; &nbsp; &nbsp; 24&nbsp; 01,01,2018 08:25&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;B&nbsp; &nbsp; &nbsp; 35&nbsp; 01,01,2018 08:30&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C&nbsp; &nbsp; &nbsp; 1
随时随地看视频慕课网APP

相关分类

Python
我要回答