![](/img/trans.png)
[英]Pandas DataFrame group by consecutive same values on multiple columns
[英]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
現在,您可以將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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.