样本数据:
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'])
df['idx'] = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'B', 'C', 'D']
print(df)
A B C idx
0 1.764052 0.400157 0.978738 A
1 2.240893 1.867558 -0.977278 B
2 0.950088 -0.151357 -0.103219 C
3 0.410599 0.144044 1.454274 D
4 0.761038 0.121675 0.443863 A
5 0.333674 1.494079 -0.205158 B
6 0.313068 -0.854096 -2.552990 C
7 0.653619 0.864436 -0.742165 B
8 2.269755 -1.454366 0.045759 C
9 -0.187184 1.532779 1.469359 D
我有一个像上面的熊猫数据框。
我需要为每行创建一个新列“值”,如果该列存在“ idx”,则为该列索引,如果不存在则返回“ NaN”。
我的预期输出是:
A B C idx value
0 1.764052 0.400157 0.978738 A 1.764052
1 2.240893 1.867558 -0.977278 B 1.867558
2 0.950088 -0.151357 -0.103219 C -0.103219
3 0.410599 0.144044 1.454274 D NaN
4 0.761038 0.121675 0.443863 A 0.761038
5 0.333674 1.494079 -0.205158 B 1.494079
6 0.313068 -0.854096 -2.552990 C -2.552990
7 0.653619 0.864436 -0.742165 B 0.864436
8 2.269755 -1.454366 0.045759 C 0.045759
9 -0.187184 1.532779 1.469359 D NaN
使用isin
过滤掉无效的列名,然后用DataFrame.lookup
,好了,......“查找”你的价值观。
idx = df.loc[df.idx.isin(df.columns), 'idx']
df.loc[idx.index, 'value'] = df.lookup(idx.index, idx)
df
A B C idx value
0 1.764052 0.400157 0.978738 A 1.764052
1 2.240893 1.867558 -0.977278 B 1.867558
2 0.950088 -0.151357 -0.103219 C -0.103219
3 0.410599 0.144044 1.454274 D NaN
4 0.761038 0.121675 0.443863 A 0.761038
5 0.333674 1.494079 -0.205158 B 1.494079
6 0.313068 -0.854096 -2.552990 C -2.552990
7 0.653619 0.864436 -0.742165 B 0.864436
8 2.269755 -1.454366 0.045759 C 0.045759
9 -0.187184 1.532779 1.469359 D NaN
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句