我试图将熊猫的数据框归为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',请尝试使用'应用“方法”,还有许多其他方法取决于尝试。
我希望你们中的一些人可以提出解决方案,谢谢。
答案 0 :(得分:6)
创建辅助程序Series
,将ne
(!=
)的shift
值与cumsum
进行比较,然后agg
与{{ 3}}和first
:
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