我有一个包含 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)
添加回答
举报
0/150
提交
取消