我有一個問題(希望很簡單)。我正在嘗試使用 Pandas 在 Python 中創(chuàng)建運(yùn)行總計(jì)。假設(shè)我有一些工人,他們每天都會記錄他們的工作時間。我想知道每天報告的到目前為止他們工作的總小時數(shù)。假設(shè)我有一個 Pandas 數(shù)據(jù)框,有四列,如下所示(在日期之間添加水平空間以便于閱讀): 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 列執(zhí)行以下操作:For Day 2 onward: For each worker: Add up previous day's work, plus previous day's hours worked thus far因此,HoursWorkedThusFar 列應(yīng)填寫為: 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)以下是生成該示例初始數(shù)據(jù)幀的代碼: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貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個贊
嘗試使用pd.Series.cumsum()
生成運(yùn)行總計(jì)
#?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()
分解它
我們創(chuàng)建df["HoursThusFar"]
變量并執(zhí)行以下操作:
我們將其轉(zhuǎn)換
["HoursWorked"]
為astype(float)
我們將數(shù)據(jù)框和
groupby
每個數(shù)據(jù)框稱為"Worker"
我們讓
["HoursWorked"]
序列準(zhǔn)備好計(jì)算運(yùn)行總和我們調(diào)用
cumsum()
方法來獲取運(yùn)行總計(jì)

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