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()))
所以我现在正面临这个挑战。我有一个 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()))