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()

正是我想要的,谢谢!我想我把我真正想做的事情复杂化了,而不是退后一步,重新考虑分组。最好的情况就是这样;。很高兴我能帮忙。