我需要通过在pandas数据帧中涉及多个列来连续执行一个组。我已经找到了关于如何使用单个列连续分组的答案,但我不确定如何将其扩展到多个列。
例如,我的数据如下:
Time Object Status
1 A On
2 A Off
3 A On
4 B On
5 B On
我想用相同的对象和状态计算连续观察值。
Object Status Duration
1 A On 1
2 A Off 1
3 A On 1 ,
4 B On 2
由于
答案 0 :(得分:2)
添加"连续性"条件,将每一行与其后续行进行比较。 当他们不平等时,我们希望开始一个新的小组:
df
现在,您可以按group
,Object
和Status
对count
进行分组,然后按df.groupby([group, df['Object'], df['Status']], as_index=False).agg('count')
# Object Status Time
# 0 A On 1
# 1 A Off 1
# 2 A On 1
# 3 B On 2
进行汇总:
import pandas as pd
df = pd.DataFrame({'Object': ['A', 'A', 'A', 'B', 'B'],
'Status': ['On', 'Off', 'On', 'On', 'On'],
'Time': [1, 2, 3, 4, 5]})
mask = (df[['Object','Status']] != df[['Object','Status']].shift(1)).any(axis=1)
group = mask.cumsum()
result = df.groupby([group, df['Object'], df['Status']], as_index=False).agg('count')
result = result.rename(columns={'Time':'Duration'})
print(result)
Object Status Duration
0 A On 1
1 A Off 1
2 A On 1
3 B On 2
产量
{{1}}