我需要使用 Python / Pandas GROUP BY按每周狀態計算總小時數和小時數。
Id Week Status Hours
1 01/10/2022 - 01/16/2022 On 5
2 01/10/2022 - 01/16/2022 Off 2
3 01/17/2022 - 01/23/2022 Off 6
4 01/17/2022 - 01/23/2022 On 1
5 01/17/2022 - 01/23/2022 On 5
6 01/03/2022 - 01/09/2022 On 10
7 01/10/2022 - 01/16/2022 Off 9
8 01/03/2022 - 01/09/2022 On 3
9 01/24/2022 - 01/30/2022 Off 4
10 01/24/2022 - 01/30/2022 On 7
test_data = {'Id': [1,2,3,4,5,6,7,8,9,10],
'Week': ['01/10/2022 - 01/16/2022', '01/10/2022 - 01/16/2022', '01/17/2022 - 01/23/2022', '01/17/2022 - 01/23/2022', '01/17/2022 - 01/23/2022', '01/03/2022 - 01/09/2022', '01/10/2022 - 01/16/2022', '01/03/2022 - 01/09/2022', '01/24/2022 - 01/30/2022', '01/24/2022 - 01/30/2022'],
'Status': ['On', 'Off', 'Off', 'On', 'On', 'On', 'Off', 'On', 'Off', 'On'],
'Hours': [5,2,6,1,5,10,9,3,4,7]}
test_df = pd.DataFrame(data=test_data)
我可以獲得每周的總小時數:
test_df.groupby(by=['Week'], as_index=False).agg({"Hours": "sum"})
但我不知道如何按狀態分組,所以它將是 2 個額外的列(On Status Hours和Off Status Hours)
如果我將 Status 列添加到 groupby 部分,它會創建額外的行(我明白為什么)
test_df.groupby(by=['Week', 'Status'], as_index=False).agg({"Hours": "sum"})
我想要的輸出:
| 星期 | 全部小時數 | 在狀態時間 | 關閉狀態時間 |
|---|---|---|---|
| 01/03/2022 - 01/09/2022 | 13 | 13 | 0 |
| 2022 年 1 月 10 日 - 2022 年 1 月 16 日 | 16 | 5 | 11 |
| 2022 年 1 月 17 日 - 2022 年 1 月 23 日 | 12 | 6 | 6 |
| 2022 年 1 月 24 日 - 2022 年 1 月 30 日 | 11 | 7 | 4 |
uj5u.com熱心網友回復:
您可以使用:
(test_df
.groupby(['Week', 'Status'])['Hours']
.sum()
.unstack(1, fill_value=0)
.add_suffix(' Status Hours')
.assign(**{'Total Hours': lambda d: d.sum(1)})
)
輸出:
Status Off Status Hours On Status Hours Total Hours
Week
01/03/2022 - 01/09/2022 0 13 13
01/10/2022 - 01/16/2022 11 5 16
01/17/2022 - 01/23/2022 6 6 12
01/24/2022 - 01/30/2022 4 7 11
uj5u.com熱心網友回復:
你可以pd.pivot_table用來得到你的結果:
x = pd.pivot_table(
test_df,
index="Week",
columns="Status",
values="Hours",
aggfunc="sum",
fill_value=0,
).add_suffix(" Status Hours")
x["Total Hours"] = x.sum(axis=1)
print(x)
印刷:
Status Off Status Hours On Status Hours Total Hours
Week
01/03/2022 - 01/09/2022 0 13 13
01/10/2022 - 01/16/2022 11 5 16
01/17/2022 - 01/23/2022 6 6 12
01/24/2022 - 01/30/2022 4 7 11
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453429.html
標籤:Python 熊猫 数据框 通过...分组 熊猫-groupby
