Python 如何在按多个列分组的pandas数据表中获得上一年同一季度的变化
我有一个数据表,看起来像这样,但有不止一个国家和更多年的数据:Python 如何在按多个列分组的pandas数据表中获得上一年同一季度的变化,python,pandas,Python,Pandas,我有一个数据表,看起来像这样,但有不止一个国家和更多年的数据: | Country | Year | Quarter | Amount | ------------------------------------------- | UK | 2014 | 1 | 200 | | UK | 2014 | 2 | 250 | | UK | 2014 | 3 | 200
| Country | Year | Quarter | Amount |
-------------------------------------------
| UK | 2014 | 1 | 200 |
| UK | 2014 | 2 | 250 |
| UK | 2014 | 3 | 200 |
| UK | 2014 | 4 | 150 |
| UK | 2015 | 1 | 230 |
| UK | 2015 | 2 | 200 |
| UK | 2015 | 3 | 200 |
| UK | 2015 | 4 | 160 |
-------------------------------------------
我想得到上一年同一季度每行的变化。因此,对于示例中的前4行,更改将为null,因为该季度没有以前的数据。对于2015年第一季度,差异将为30,因为上一年的第一季度为200,因此230-200=30。所以我想得到的数据表是:
| Country | Year | Quarter | Amount | Change |
---------------------------------------------------|
| UK | 2014 | 1 | 200 | NaN |
| UK | 2014 | 2 | 250 | NaN |
| UK | 2014 | 3 | 200 | NaN |
| UK | 2014 | 4 | 150 | NaN |
| UK | 2015 | 1 | 230 | 30 |
| UK | 2015 | 2 | 200 | -50 |
| UK | 2015 | 3 | 200 | 0 |
| UK | 2015 | 4 | 160 | 10 |
---------------------------------------------------|
从其他问题来看,我尝试了使用.diff方法,但我不太确定如何让它达到我想要的效果,或者我是否真的需要做一些更激烈的事情来解决这个问题,例如,我尝试了:
df.groupby=[国家、年度、季度].sum.diff.head10
但是,这会产生与整个表中上一行的差异,而不是与上一年同一季度的差异。由于您希望更改国家和季度,而不是年份,因此必须从组中删除年份
df['Change'] = df.groupby(['Country', 'Quarter']).Amount.diff()
正是我想要的,谢谢!我想我把我真正想做的事情复杂化了,而不是退后一步,重新考虑分组。最好的情况就是这样;。很高兴我能帮忙。