使用groupby按分区移位

时间:2015-08-17 03:18:28

标签: python pandas

我有一个数据框,其中有一列我想转移,但是过分区而不是整个数据帧。

例如,我想从这个数据框开始:

State, Year, GDP
NY,2011,100
NY,2012,110
NY,2013,120
CA,2011,70
CA,2012,80
CA,2013,90

到这个数据框:

State, Year, GDP, GDP y-1
NY,2011,100,NaN
NY,2012,110,100
NY,2013,120,110
CA,2011,70,NaN
CA,2012,80,70
CA,2013,90,80

到目前为止,我使用过这样的代码:

grouped = df.groupby("State")
for state, state_df in grouped:
    state_df["GDP Y-1"]=state_df["GDP"].shift(1)

我相信这给了我我想要的每个州,但后来我不知道如何将它重新组合在一起(基本上只是将每个数据帧附加到彼此之下)。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您可以将中间数据框存储在列表中,并使用pd.concat将它们连接在一起:

grouped = df.groupby("State")
L = []
for state, state_df in grouped:
    state_df["GDP Y-1"]=state_df["GDP"].shift(1)
    L.append(state_df)

pd.concat(L)
Out[149]: 
  State  Year  GDP  GDP Y-1
3    CA  2011   70      NaN
4    CA  2012   80       70
5    CA  2013   90       80
0    NY  2011  100      NaN
1    NY  2012  110      100
2    NY  2013  120      110

答案 1 :(得分:0)

下面的行完成任务

df['GDP Y-1'] = df.groupby('State')['GDP'].transform(lambda x: x.shift(1))

我看到这个问题是在大约2年前提出的,但是答案可能会对其他人有所帮助