簡體   English   中英

連續多個列的Python Pandas分組

[英]Python Pandas Group By Consecutive Multiple Columns

我需要對熊貓數據框中的多個列進行連續分組。 我找到了關於如何對單個列進行連續分組的答案,但是我不確定如何將其擴展到多個列。

例如,我的數據如下:

    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

謝謝

要添加“連續性”條件,請將每一行與其后續行進行比較。 當它們不相等時,我們希望開始一個新的小組:

mask = (df[['Object','Status']] != df[['Object','Status']].shift(1)).any(axis=1)
# 0     True
# 1     True
# 2     True
# 3     True
# 4    False
# dtype: bool

group = mask.cumsum()
# 0    1
# 1    2
# 2    3
# 3    4
# 4    4
# dtype: int64

現在,您可以將dfgroupObjectStatus通過和匯總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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM