2015-08-17 36 views
0

我有一列数据帧,我想要移位,但是在分区而不是整个数据框。使用group by partition by

例如,我想从这个数据帧去:

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) 

我相信这给了我我想要的每个国家,但是我不知道如何将它结合在一起(基本上只是追加每个数据帧在另一个下面)。我怎样才能做到这一点?

回答

1

您可以将您的中间DataFrames在列表中,并使用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 
+0

感谢。我应该想到这一点。 –