Python 熊猫-创建值不同的列

Python 熊猫-创建值不同的列,python,pandas,Python,Pandas,我有下面的数据集。如何创建一个新的列来显示每个人在每次到期时的资金差异 这列是黄色的,这就是我想要的。你可以看到,这是一个人的每个到期点在金钱上的差异。我用颜色突出显示了其他行,因此更清晰 非常感谢 [] 结果: Day Name Money_x Expiry Difference 0 2020-08-30 John 100 1Y 50 1 2020-08-30 Mike 950 1Y 90

我有下面的数据集。如何创建一个新的列来显示每个人在每次到期时的资金差异

这列是黄色的,这就是我想要的。你可以看到,这是一个人的每个到期点在金钱上的差异。我用颜色突出显示了其他行,因此更清晰

非常感谢

[]

结果:

          Day  Name  Money_x Expiry  Difference
0  2020-08-30  John      100     1Y          50
1  2020-08-30  Mike      950     1Y         900
2  2020-08-30  John      200     2Y         -50
3  2020-08-30  Mike     1000     2Y        -200

如果差异是从上一个日期衍生出来的,您可以在开始时定义一个日期变量,以查找今天(t)和前一天(t-1),以过滤掉原始数据帧。

您可以使用
groupby.diff

以数据帧为例

df = pd.DataFrame({
    'Day': [30, 30, 30, 30, 29, 29, 28, 28],
    'Name': ['John', 'Mike', 'John', 'Mike', 'John', 'Mike', 'John', 'Mike'],
    'Money': [100, 950, 200, 1000, 50, 50, 250, 1200],
    'Expiry': [1, 1, 2, 2, 1, 1, 2, 2]
})
print(df)
看起来像

   Day  Name  Money  Expiry
0   30  John    100       1
1   30  Mike    950       1
2   30  John    200       2
3   30  Mike   1000       2
4   29  John     50       1
5   29  Mike     50       1
6   28  John    250       2
7   28  Mike   1200       2
代码呢

# make sure we have dates in the order we want
df.sort_values('Day', ascending=False)

# groubpy and get the difference from the next row in each group
# diff(1) calculates the difference from the previous row, so -1 will point to the next
df['Difference'] = df.groupby(['Name', 'Expiry']).Money.diff(-1)
输出

   Day  Name  Money  Expiry  Difference
0   30  John    100       1        50.0
1   30  Mike    950       1       900.0
2   30  John    200       2       -50.0
3   30  Mike   1000       2      -200.0
4   29  John     50       1         NaN
5   29  Mike     50       1         NaN
6   28  John    250       2         NaN
7   28  Mike   1200       2         NaN

嗨,欢迎来到苏。。!!请创建一个可以通过代码复制的虚拟示例。您可以参考:对不起,当我将图像放入图像编辑器时,它只是粘贴了链接。您可以使用
df.head(10).to_dict('list')
获取您的样本。。。我看到第一行有diff
50
,并假设这是因为该代码应该总是减去该
名称到期的前一个日期,如果没有日期
8-29
Mike-1Y
的数据,你会减去他在
8-28
上的任何钱吗?谢谢Richie。当我在原始数据帧中捕获最后7天时,将始终存在前一天的数据。编辑:你提到的内容是正确的,它应该总是减去以前的日期that@RichieV已经向您建议了将数据转换为代码片段的正确方法,请发布相同的代码片段,以便我们可以在我们的系统中复制数据,提前感谢。:)可能有一种更简单的方法来实现这一点,或者您可以在函数中执行上述操作,通过将日期定义为变量来实现更大的可伸缩性。我将尝试返回给您我正在尝试:df['Difference']=df.groupby(['Name','expiration']).df['Money'].diff(-1)。。。获取一个错误“DateFrameGroupBy”对象没有属性“df”检查它可能是什么
   Day  Name  Money  Expiry  Difference
0   30  John    100       1        50.0
1   30  Mike    950       1       900.0
2   30  John    200       2       -50.0
3   30  Mike   1000       2      -200.0
4   29  John     50       1         NaN
5   29  Mike     50       1         NaN
6   28  John    250       2         NaN
7   28  Mike   1200       2         NaN