Pandas 多个条件行之间的差异

Pandas difference between row by multiple conditions

所以我现在正面临这个挑战。我有一个 pandas df(超过 3000 万行),如下所示:

Name  | State | Date       | Income
____________________________________
Name1 | Tx    | 2019-01-26 | 0
Name2 | CA    | 2019-01-26 | 0
Name3 | LA    | 2019-01-26 | 0
Name1 | Tx    | 2019-02-26 | 0
Name2 | CA    | 2019-02-26 | 0
Name3 | LA    | 2019-02-26 | 0

如您所见,我有 2 列用于识别一个人(他的姓名和州),然后 1 列用于时间戳(随月变化),我想要实现的是获得差异每个人几个月之间,结果是这样的:

Name  | State | Date       | Income | Variation
____________________________________
Name1 | Tx    | 2019-01-26 | 0   |  NaN
Name2 | CA    | 2019-01-26 | 0   |  NaN
Name3 | LA    | 2019-01-26 | 0   |  NaN
Name1 | Tx    | 2019-02-26 | 0   |  10
Name2 | CA    | 2019-02-26 | 0   | -20
Name3 | LA    | 2019-02-26 | 0   |  10

接下来的月份依此类推 我找到了 diff 函数,但我不知道如何指定必须匹配相同的名称和状态,但对于上个月

这应该很有魅力:

df['Variation'] = df.groupby('State')['Income'].diff()

您应该按 Date 排序,并在 ['Name', 'State'] 上使用 groupby 转换。此解决方案应该有效:

df['Variation'] = (df.sort_values('Date').groupby(['Name', 'State'])['Income']
                   .transform(lambda x: x.diff()))