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