Python将基于另一列值创建新列

2024-10-01 07:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

基于dataframe列val_1值,查看其他列col_0-10标签前缀,然后创建另一列Mycl

数据帧看起来像:

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'].aType(str)]

要生成数据帧的DDL:

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]})

谢谢


Tags: 数据iddfvalcol2col3col1col4
2条回答

使用^{}并将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  

您走的是正确的道路,唯一的问题是,如果您按照您的方式执行,那么您将返回整个列,而不仅仅是您想要的一个值

相反,您可以使用例如^{}

df['mycol'] = df.apply(lambda x: x['col'+str(x['val_1'])], axis=1)

相关问题 更多 >