我有一个数据框df,看起来像这样
col1 col2
A 2 2
B 4 1
C 0 0
D 1 1
E 2 2
,并希望添加两列,以便对于第i行,新列col3包含df.loc [i-1,col1]的值,而col4包含df.loc [i-2]的值, col1]。
col1 col2 col3 col4
A 2 2 Nan Nan
B 4 1 2 Nan
C 0 0 4 2
D 1 1 0 4
E 2 2 1 0
到目前为止,我遍历数据框并“手动”添加每个值。有没有比我的方法更聪明的方法来解决这个问题?
我的暴力解决方案(忽略前两行):
for i in range(2,df.shape[0]):
for j in range(2):
df.iloc[i,j+2] = df.iloc[i-1-j, j]
答案 0 :(得分:2)
带有map
和pd.concat
df.join(
pd.concat(
dict(enumerate(map(df.col1.shift, range(1, 3)), 3)), axis=1
).add_prefix('col')
)
col1 col2 col3 col4
A 2 2 NaN NaN
B 4 1 2.0 NaN
C 0 0 4.0 2.0
D 1 1 0.0 4.0
E 2 2 1.0 0.0
答案 1 :(得分:1)
使用shift
for x in range(2):
df['col'+str(x+3)]=df.col1.shift(x+1)
df
Out[152]:
col1 col2 col3 col4
A 2 2 NaN NaN
B 4 1 2.0 NaN
C 0 0 4.0 2.0
D 1 1 0.0 4.0
E 2 2 1.0 0.0