Python Pandas Group连续多列

时间:2018-04-05 23:44:24

标签: python pandas group-by pandas-groupby

我需要通过在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

由于

1 个答案:

答案 0 :(得分:2)

添加"连续性"条件,将每一行与其后续行进行比较。 当他们不平等时,我们希望开始一个新的小组:

df

现在,您可以按groupObjectStatuscount进行分组,然后按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}}