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

如何从 pandas 数据框中的当前行中减去前一行以创建一个新列以每个名称重新启动进程?

如何从 pandas 数据框中的当前行中减去前一行以创建一个新列以每个名称重新启动进程?

慕盖茨4494581 2023-03-01 16:35:41
我有一个包含 3 列的数据框,其中第一列是带有人名的分类变量,第二列是日期,第三列是问题的累积出现次数。我想生成一个新列,其中包含每个人每天发生的事件。**Name     Date          Cumulative**John     01-01-2020    0John     02-01-2020    5John     03-01-2020    10John     04-01-2020    12Peter    01-01-2020    0Peter    02-01-2020    3Peter    03-01-2020    7Peter    04-01-2020    10James    01-01-2020    0James    02-01-2020    10James    03-01-2020    14James    04-01-2020    18Kirk     01-01-2020    0Kirk     02-01-2020    12Kirk     03-01-2020    12Kirk     04-01-2020    15Rob      01-01-2020    0Rob      02-01-2020    11Rob      03-01-2020    18Rob      04-01-2020    23如果我使用 df['By Day'] = df.Cumulative.diff() 结果很好但是在每个人第一次出现时它会给我负数而不是 0(因为它将前一个数字减去 0 ). 它会给我如下:Name     Date          Cumulative  By DayJohn     01-01-2020    0           0John     01-02-2020    0           0John     03-01-2020    5           5John     04-01-2020    10          5John     05-01-2020    12          2Peter    01-01-2020    0           -12Peter    02-01-2020    0           0Peter    03-01-2020    3           3Peter    04-01-2020    7           4Peter    04-01-2020    10          3James    01-01-2020    0           -10James    02-01-2020    0           0James    03-01-2020    10          10James    04-01-2020    14          4James    04-01-2020    18          4 Kirk     01-01-2020    0           -18Kirk     02-01-2020    0           0Kirk     03-01-2020    12          12Kirk     04-01-2020    15          3Kirk     04-01-2020    19          4Rob      01-01-2020    5           -14Rob      02-01-2020    11          6Rob      03-01-2020    18          7Rob      04-01-2020    23          5Rob      04-01-2020    27          4我想对每个名字进行区分,以便每次不同的人都从 0 开始。我考虑过按名称使用迭代,但它会为每个条目执行 5 次。例如,对于 Rob,我想要 0 6 7 5 4 而不是从 -14 开始(Kirk 的前 19 -5 来自 Rob 的第一个条目)
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您应该首先在该列上使用groupby函数Name以分别对每个人应用该diff函数。然后你可以使用0fillna(0)替换NaN值(将存在于每个人的第一行):

df["By Day"] = df.groupby("Name").Comulative.diff().fillna(0)


查看完整回答
反对 回复 2023-03-01
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

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