gpt4 book ai didi

python - Pandas dataframe 应用引用前一行来计算差异

转载 作者:太空狗 更新时间:2023-10-30 02:09:50 25 4
gpt4 key购买 nike

我有以下包含 2 列(简化)的 Pandas 数据框。第一列包含玩家姓名,第二列包含日期(datetime 对象):

  player    date
A 2010-01-01
A 2010-01-09
A 2010-01-11
A 2010-01-15
B 2010-02-01
B 2010-02-10
B 2010-02-21
B 2010-02-23

我想添加一列diff,它代表每个玩家的天数差异。结果应如下所示:

  player    date            diff
A 2010-01-01 0
A 2010-01-09 8
A 2010-01-11 2
A 2010-01-15 4
B 2010-02-01 0
B 2010-02-10 9
B 2010-02-21 11
B 2010-02-23 2

第一行的 diff 为 0,因为没有更早的日期。第二行显示 8,因为 2010-01-012010-01-09 相差八天。

问题不在于计算两个 datetime 对象之间的日期差异。我只是不确定如何添加新列。我知道,我必须先创建一个 groupby (df.groupby('player')),然后使用 apply(或者可能 转换?)。然而,我被卡住了,因为为了计算差异,我需要引用应用函数中的前一行,如果可能的话,我不知道该怎么做。

非常感谢。

更新:在尝试了下面提出的两种解决方案之后,我发现它们不适用于我的代码。很头疼之后,我发现我的数据有重复的索引。因此,在我发现我有重复的索引后,一个简单的 df.reset_index() 解决了我的问题并且建议的解决方案有效。由于两种解决方案都有效,但我只能将其中一种标记为正确,因此我会选择更简洁/更短的解决方案。不过还是谢谢你们!

最佳答案

你可以简单地写:

df['difference'] = df.groupby('player')['date'].diff().fillna(0)

这为新的 timedelta 列提供了正确的值:

  player       date  difference
0 A 2010-01-01 0 days
1 A 2010-01-09 8 days
2 A 2010-01-11 2 days
3 A 2010-01-15 4 days
4 B 2010-02-01 0 days
5 B 2010-02-10 9 days
6 B 2010-02-21 11 days
7 B 2010-02-23 2 days

(我使用名称“difference”而不是“diff”来区分名称与方法 diff。)

关于python - Pandas dataframe 应用引用前一行来计算差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33461135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com