在python中动态更改行值

时间:2018-09-12 12:25:04

标签: python python-3.x pandas indexing

我在Python的DataFrame中具有以下信息:

##    x1   x2   x3   x4   x5   colum
##0  206  214  021  122  554     2
##1  226  234  123  456  789     4
##2  245  253  558  855  123     5
##3  265  272  000  111  222     4
##4  283  291  214  589  996     1

并且我需要根据包含colum列的值生成一个新列,方法如下:

##    x1   x2   x3   x4   x5   colum   newColum
##0  206  214  021  122  554     2       214
##1  226  234  123  456  789     4       456
##2  245  253  558  855  123     5       123
##3  265  272  000  111  222     4       111
##4  283  291  214  589  996     1       283

我不知道我的要求是否明确,谢谢谁能帮助我。

2 个答案:

答案 0 :(得分:1)

使用pd.DataFrame.lookup并将整数映射到列标签:

df['new'] = df.lookup(df.index, 'x' + df['colum'].astype(str))

print(df)

    x1   x2   x3   x4   x5  colum  new
0  206  214   21  122  554      2  214
1  226  234  123  456  789      4  456
2  245  253  558  855  123      5  123
3  265  272    0  111  222      4  111
4  283  291  214  589  996      1  283

答案 1 :(得分:0)

使用numpy indexing

df['new'] = df.values[np.arange(len(df)),  df['colum'] - 1]
print (df)
    x1   x2   x3   x4   x5  colum  new
0  206  214   21  122  554      2  214
1  226  234  123  456  789      4  456
2  245  253  558  855  123      5  123
3  265  272    0  111  222      4  111
4  283  291  214  589  996      1  283