为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信