我有一個資料框,我需要在同一天配對連續事件,然后從前者中減去后者。每個都有一個時間戳和一個日期。
time date event score
0 2022-03-07 06:45:00 00:00 2022-03-07 light 80.066667
1 2022-03-07 18:12:00 00:00 2022-03-07 dark 79.857667
2 2022-03-30 06:25:00 00:00 2022-03-30 light 107.060833
3 2022-03-30 13:38:00 00:00 2022-03-30 dark 105.324000
4 2022-03-30 13:40:00 00:00 2022-03-30 dark 105.239750
5 2022-03-30 15:47:00 00:00 2022-03-30 light 106.863143
6 2022-04-01 06:25:00 00:00 2022-04-01 light 101.271867
我嘗試使用傳播資料框
df = df.pivot(index='time', columns='event', values='score')
event light dark
time
2022-03-07 06:45:00 00:00 80.066667 NaN
2022-03-07 18:12:00 00:00 NaN 79.857667
2022-03-30 06:25:00 00:00 107.060833 NaN
2022-03-30 13:38:00 00:00 NaN 105.324000
2022-03-30 13:40:00 00:00 NaN 105.239750
2022-03-30 15:47:00 00:00 106.863143 NaN
2022-04-01 06:25:00 00:00 101.271867 NaN
然而,由于事件發生在不同的時間,傳播資料幀具有 NaN。理想情況下,我會以這種方式結束,我會保留對中第一次出現的時間(亮或暗),對齊事件(注意:對應的暗以匹配 2022-04-01 尚未發生的亮)以及何時光先到,我從光中減去黑暗,當黑暗先到時,我從光中減去黑暗。
event light dark diff
time
2022-03-07 06:45:00 00:00 80.066667 79.857667 -0.208999
2022-03-30 06:25:00 00:00 107.060833 105.324000 -1.7368
2022-03-30 13:40:00 00:00 106.863143 105.239750 -1.6233
2022-04-01 06:25:00 00:00 101.271867 NaN NaN
uj5u.com熱心網友回復:
這是使用groupby cumcount創建組的一種方法,然后在另一個groupby 中使用該組first來獲取每個事件在一天中第一次發生的時間。然后轉:
out = (df.assign(time=df.groupby(df.groupby('event').cumcount())['time'].transform('first'))
.pivot('time', 'event', 'score').reset_index().rename_axis([None], axis=1))
輸出:
time dark light
0 2022-03-07 06:45:00 00:00 79.857667 80.066667
1 2022-03-30 06:25:00 00:00 105.324000 107.060833
2 2022-03-30 13:40:00 00:00 105.239750 106.863143
3 2022-04-01 06:25:00 00:00 NaN 101.271867
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454534.html
標籤:Python 熊猫 数据框 熊猫-groupby 数据透视表
