亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Pandas 運行引用多列的總計

使用 Pandas 運行引用多列的總計

GCT1015 2023-07-27 16:08:58
我有一個問題(希望很簡單)。我正在嘗試使用 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"]變量并執行以下操作:

  1. 我們將其轉換["HoursWorked"]astype(float)

  2. 我們將數據框和groupby每個數據框稱為"Worker"

  3. 我們讓["HoursWorked"]序列準備好計算運行總和

  4. 我們調用cumsum()方法來獲取運行總計


查看完整回答
反對 回復 2023-07-27
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

我想這就是你要找的。不過,您需要首先將列轉換為數字類型。

df['HoursWorked'] = df['HoursWorked'].astype(float)


df['HoursWorkedThusFar'] = df.groupby('Worker')['HoursWorked'].transform(lambda x: x.cumsum().shift().fillna(0))



查看完整回答
反對 回復 2023-07-27
  • 2 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號