Pandas基于列值的行值

时间:2018-04-26 17:29:02

标签: python pandas

我有一个看起来像这样的数据框:

A1   A2   A3   A4   B   C   D
0     2   9     0   9   7   2
7     6   7     3   6   8   4     
3     7   4     9   2   1   1

我想创建一个新列,称之为E,其值来自列A1,A2,A3或A4,具体取决于列D的值。

例如,如果D = 2,那么E的值取自A2列。我的新数据框看起来像这样:

A1   A2   A3   A4   B   C   D   E
0     2   9     0   9   7   2   2
7     6   7     3   6   8   4   3  
3     7   4     9   2   1   1   3

我尝试过使用df.apply,但这似乎不起作用...... 关于如何做到这一点的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:2)

我们只需要lookup(请参阅documentation

df.lookup(df.index,df.columns[df.D-1])
Out[309]: array([2, 3, 3], dtype=int64)

分配后

df['E']=df.lookup(df.index,df.columns[df.D-1])
df
Out[311]: 
   A1  A2  A3  A4  B  C  D  E
0   0   2   9   0  9  7  2  2
1   7   6   7   3  6  8  4  3
2   3   7   4   9  2  1  1  3

更新

df.D.astype(str).map(dict(zip(df.columns.str[-1],df.columns)))
Out[316]: 
0    A2
1    A4
2    A1
Name: D, dtype: object

然后

df.lookup(df.index,df.D.astype(str).map(dict(zip(df.columns.str[-1],df.columns))))
Out[317]: array([2, 3, 3], dtype=int64)