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值不一定指列号;它们实际上是指列标题的最后一位数字。