Python 基于列值的行值

Python 基于列值的行值,python,pandas,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

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

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,但似乎不起作用。。。 你知道怎么做吗


谢谢

我们只需要
查找
(请参阅)

在把它分配回来之后

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['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
然后


如果D不等于2会发生什么?我们是否填充默认值,即3?如果D不等于2会发生什么?我们是否填充默认值,即3?谢谢!如果A1、A2、A3和A4的左侧有列,该怎么办?您的方法是否仍然适用?@user2920100如果您的df.D值总是指整个df的列位置,它应该总是有效的否,df.D值不一定指列号;它们实际上指的是列标题的最后一位。谢谢!如果A1、A2、A3和A4的左侧有列,该怎么办?您的方法是否仍然适用?@user2920100如果您的df.D值总是指整个df的列位置,它应该总是有效的否,df.D值不一定指列号;它们实际上是指列标题的最后一位数字。