我有一个看起来像这样的数据框:
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,但这似乎不起作用...... 关于如何做到这一点的任何想法?
谢谢!
答案 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)