如何有效地将列数据添加为行?

时间:2019-04-11 14:44:31

标签: python python-3.x pandas

我有一个数据框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]

2 个答案:

答案 0 :(得分:2)

带有mappd.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