我有一个数据框,其中有一列我想转移,但是过分区而不是整个数据帧。
例如,我想从这个数据框开始:
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)
我相信这给了我我想要的每个州,但后来我不知道如何将它重新组合在一起(基本上只是将每个数据帧附加到彼此之下)。我怎么能这样做?
答案 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年前提出的,但是答案可能会对其他人有所帮助