如何找到一个大于零的值,并将相应的列名写入pandas的新列中?

2024-04-26 23:26:00 发布

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

我有一个如下的数据框:

 M1 M2T M2N FOKI    LOESS   PYRIT   ABRAUM  AV  DEP_TON DEP_TON_15  FOKIFE  FOKIMA  KIES
 0  0   0   0   0   0   0   0   0   0   0   0   5755
 0  0   0   0   0   0   0   0   0   0   0   0   1284
 0  0   2084    0   0   0   0   0   0   0   0   0   0
 4471   2922    0   0   0   0   0   0   0   0   0   0   0
 0  0   0   0   0   19522   0   0   0   0   0   0   0

我想创建一个新列,每行的值都是值大于零的行的列名,如下所示:

 MaterialType   M1  M2T M2N FOKI    LOESS   PYRIT   ABRAUM  AV  DEP_TON DEP_TON_15  FOKIFE  FOKIMA  KIES
 KIES   0   0   0   0   0   0   0   0   0   0   0   0   5755
 KIES   0   0   0   0   0   0   0   0   0   0   0   0   1284
 M2N    0   0   2084    0   0   0   0   0   0   0   0   0   0
 M1-M2T 4471    2922    0   0   0   0   0   0   0   0   0   0   0
 PYRIT  0   0   0   0   0   19522   0   0   0   0   0   0   0

对于值大于1的行,用破折号分隔。你知道吗

你能帮我用python写一个小脚本吗?你知道吗

谢谢:)


Tags: 数据avm1deploesstonmaterialtypem2t
1条回答
网友
1楼 · 发布于 2024-04-26 23:26:00

首先查找更高的值作为0,然后用列名将此掩码乘以:

print ((df > 0) * df.columns.to_series())
   M1  M2T  M2N FOKI LOESS  PYRIT ABRAUM AV DEP_TON DEP_TON_15 FOKIFE FOKIMA  \
0                                                                              
1                                                                              
2           M2N                                                                
3  M1  M2T                                                                     
4                           PYRIT                                              

   KIES  
0  KIES  
1  KIES  
2        
3        
4        

然后按join合并所有值,并按^{}删除开始和结束-

df['new'] = (((df > 0) * df.columns.to_series()).apply(lambda x: '-'.join(x), axis=1 )
                                                .str.strip('-'))
print (df)


     M1   M2T   M2N  FOKI  LOESS  PYRIT  ABRAUM  AV  DEP_TON  DEP_TON_15  \
0     0     0     0     0      0      0       0   0        0           0   
1     0     0     0     0      0      0       0   0        0           0   
2     0     0  2084     0      0      0       0   0        0           0   
3  4471  2922     0     0      0      0       0   0        0           0   
4     0     0     0     0      0  19522       0   0        0           0   

   FOKIFE  FOKIMA  KIES     new  
0       0       0  5755    KIES  
1       0       0  1284    KIES  
2       0       0     0     M2N  
3       0       0     0  M1-M2T  
4       0       0     0   PYRIT  

相关问题 更多 >