基于数据框列val_1的值,查看其他列col_0-10标签的前缀,然后创建另一个列mycol。
数据框如下:
id col0 col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 val_1
1 0 5 -5 5 -5 0 0 1 4 3 -3 1
2 0 0 0 0 0 0 0 4 -4 0 0 7
3 0 0 1 2 3 0 0 0 5 6 0 9
应用逻辑后所需的数据框:
id col0 col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 val_1 mycol
1 0 5 -5 5 -5 0 0 1 4 3 -3 1 5
2 0 0 0 0 0 0 0 4 -4 0 0 7 4
3 0 0 1 2 3 0 0 0 5 6 0 9 6
我尝试过,但这不起作用: df ['mycol'] = df ['col'+ df ['val_1']。astype(str)]
DDL生成DataFrame:
df = pd.DataFrame({'id': [1, 2, 3],
'col0': [0, 0, 0],
'col1': [5, 0, 0],
'col2': [-5, 0, 1],
'col3': [5, 0, 2],
'col4': [-5, 0, 3],
'col5' : [0, 0, 0],
'col6': [0, 0, 0],
'col7': [1, 4, 0],
'col8': [4, -4, 5],
'col9': [3, 0, 6],
'col10': [-3, 0, 0],
'val_1' : [1, 7, 9]})
谢谢!
答案 0 :(得分:6)
将DataFrame.lookup
与col
列的值添加val_1
前缀一起使用:
df['mycol'] = df.lookup(df.index, 'col' + df['val_1'].astype(str))
print (df)
id col0 col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 \
0 1 0 5 -5 5 -5 0 0 1 4 3 -3
1 2 0 0 0 0 0 0 0 4 -4 0 0
2 3 0 0 1 2 3 0 0 0 5 6 0
val_1 mycol
0 1 5
1 7 4
2 9 6
答案 1 :(得分:1)
您走在正确的轨道上,唯一的问题是,如果按照您的方式进行操作,您将返回整列,而不仅仅是返回所需的一个值。
相反,您可以使用例如DataFrame.apply
:
df['mycol'] = df.apply(lambda x: x['col'+str(x['val_1'])], axis=1)