Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何查找大于零的值,并在pandas中的新列中写入共同响应的列名?_Python_Pandas - Fatal编程技术网

Python 如何查找大于零的值,并在pandas中的新列中写入共同响应的列名?

Python 如何查找大于零的值,并在pandas中的新列中写入共同响应的列名?,python,pandas,Python,Pandas,我有一个如下所示的数据框: 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

我有一个如下所示的数据框:

 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写一个小脚本吗


谢谢:)

首先查找更高的值,如
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        
然后通过
连接
来连接所有值,并通过以下方式删除开始和结束
-


/@马苏德,你试过什么?实际上我不知道:(本论坛提供编码方面的帮助,不是为其他人编写的…访问本网站并学习,在上面发表您的想法。/@Masoud,大多数人都尝试过编码问题…看起来您甚至还没有尝试过…我们都从某个地方开始。--在zeroIt绝对是有帮助的。只是一个小问题,str.join的输出可以是这样的,HKN----HKT,如果列之间不相邻,我尝试了str.replace(…)或str.translate(…),但我认为这些都不起作用。我想你可以将其添加到
'----.join(x)
你的建议不起作用。我尝试了“'-'.join(set(x)),它起了作用;)非常感谢你的帮助抱歉,我没有测试它。天气好。很高兴能帮助你!
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