我有一個問題(希望很簡單)。我正在嘗試使用 Pandas 在 Python 中創建運行總計。假設我有一些工人,他們每天都會記錄他們的工作時間。我想知道每天報告的到目前為止他們工作的總小時數。假設我有一個 Pandas 數據框,有四列,如下所示(在日期之間添加水平空間以便于閱讀): Day Worker HoursWorked HoursWorkedThusFar 1 1 0 0 1 2 2 0 1 3 4 0 2 1 6 0 2 2 8 0 2 3 10 0 3 1 12 0 3 2 14 0 3 3 16 0我想填寫“HoursWorkedThusFar”欄。請注意,每個工人在一周開始時的工作時間為零。在非常粗略的偽代碼中,我想對 HoursWorkedThusFar 列執行以下操作:For Day 2 onward: For each worker: Add up previous day's work, plus previous day's hours worked thus far因此,HoursWorkedThusFar 列應填寫為: Day Worker HoursWorked HoursWorkedThusFar 1 1 0 0 (Initial Value) 1 2 2 0 (Initial Value) 1 3 4 0 (Initial Value) 2 1 6 0 (0+0) 2 2 8 2 (0+2) 2 3 10 4 (0+4) 3 1 12 6 (0+6) 3 2 14 10 (2+8) 3 3 16 14 (4+10)以下是生成該示例初始數據幀的代碼:import pandas as pddf = pd.DataFrame(columns=('Day', 'Worker', 'HoursWorked', 'HoursWorkedThusFar'))for i in range(3): df.loc[i] = [1, i + 1, i*2, 0]for i in range(3,6): df.loc[i] = [2, i - 2, i*2, 0]for i in range (6,9): df.loc[i] = [3, i - 5, i*2, 0]print(df)非常感謝任何建議。
2 回答

桃花長相依
TA貢獻1860條經驗 獲得超8個贊
嘗試使用pd.Series.cumsum()
生成運行總計
#?Ordering?data?by?worker?and?converting?to?numeric?for?application?of?running?total df["HoursWorked"]=df["HoursWorked"].astype(float) df["HoursThusFar"]?=?df.groupby("Worker").cumsum()
分解它
我們創建df["HoursThusFar"]
變量并執行以下操作:
我們將其轉換
["HoursWorked"]
為astype(float)
我們將數據框和
groupby
每個數據框稱為"Worker"
我們讓
["HoursWorked"]
序列準備好計算運行總和我們調用
cumsum()
方法來獲取運行總計

胡子哥哥
TA貢獻1825條經驗 獲得超6個贊
我想這就是你要找的。不過,您需要首先將列轉換為數字類型。
df['HoursWorked'] = df['HoursWorked'].astype(float) df['HoursWorkedThusFar'] = df.groupby('Worker')['HoursWorked'].transform(lambda x: x.cumsum().shift().fillna(0))
添加回答
舉報
0/150
提交
取消