所以我现在有这个挑战。我有一个熊猫df(超过3000万行(,如下所示:
Name | State | Date | Income
____________________________________
Name1 | Tx | 2019-01-26 | $100
Name2 | CA | 2019-01-26 | $500
Name3 | LA | 2019-01-26 | $200
Name1 | Tx | 2019-02-26 | $110
Name2 | CA | 2019-02-26 | $520
Name3 | LA | 2019-02-26 | $210
如您所见,我有 2 列来标识一个人(他的名字和州(,然后是 1 列用于时间戳(随月变化(,我试图实现的是获取每个人的月份之间的差异,结果如下:
Name | State | Date | Income | Variation
____________________________________
Name1 | Tx | 2019-01-26 | $100 | NaN
Name2 | CA | 2019-01-26 | $500 | NaN
Name3 | LA | 2019-01-26 | $200 | NaN
Name1 | Tx | 2019-02-26 | $110 | 10
Name2 | CA | 2019-02-26 | $480 | -20
Name3 | LA | 2019-02-26 | $210 | 10
以此类推,未来几个月 我找到了diff函数,但我不知道如何指定必须与相同的名称和状态匹配,但上个月
你应该按Date
排序,并在['Name', 'State']
上使用groupby转换。此解决方案应该有效:
df['Variation'] = (df.sort_values('Date').groupby(['Name', 'State'])['Income']
.transform(lambda x: x.diff()))
这应该像一个魅力:
df['Variation'] = df.groupby('State')['Income'].diff()