Pandas 将两列或多列按行合并为新的列条件
我想将两个或更多列合并成一个新列,根据行条件(即1,一个整数),新列应该是一个包含连接字符串的列 我尝试使用非零来过滤行中的零,但失败了Pandas 将两列或多列按行合并为新的列条件,pandas,Pandas,我想将两个或更多列合并成一个新列,根据行条件(即1,一个整数),新列应该是一个包含连接字符串的列 我尝试使用非零来过滤行中的零,但失败了 索引诉讼委员会会议 A 10 B00 C 1 1 D 0 1 尝试了此操作,但它只是合并了所有索引: rdf['NEW']=rdf.apply(lambda x:','.join(x.index)如果x.nonzero()否则为0,轴=1) “新”列应如下所示: 索引诉讼委员会会议新增 10英镑的诉讼 B00 C 1 1诉讼、董事会会议 D 0 1董事会会
索引诉讼委员会会议
A 10
B00
C 1 1
D 0 1
尝试了此操作,但它只是合并了所有索引:
rdf['NEW']=rdf.apply(lambda x:','.join(x.index)如果x.nonzero()否则为0,轴=1)
“新”列应如下所示:
索引诉讼委员会会议新增
10英镑的诉讼
B00
C 1 1诉讼、董事会会议
D 0 1董事会会议
任何帮助都将不胜感激 这是
for
循环适合于熊猫的为数不多的事情之一
col_names = rdf.columns.tolist()
rdf["NEW"] = ""
for col in col_names:
rdf.loc[rdf[col] == 1, "NEW"] = rdf.loc[rdf[col] == 1, "NEW"] + ("," + col)
rdf["NEW"] = rdf["NEW"].str.strip(",")
这就行了
rdf['New'] = rdf.replace(1, pd.Series(rdf.columns+',', rdf.columns)).\
replace(0, '').sum(axis = 1).\
str.strip(',')
使用:
谢谢这是好的和整洁的!谢谢,我是个新来这里“问”问题的人。虽然我已经浏览stackoverflow超过五年了。@ModernChart当然:)没问题,干杯:)for loop对代码阅读很好,但不是我想要的。无论如何谢谢你!
final=df.assign(NEW=(df.dot(df.columns+',').str[:-1]))
LAWSUIT BOARD-MEETING NEW
index
A 1 0 LAWSUIT
B 0 0
C 1 1 LAWSUIT,BOARD-MEETING
D 0 1 BOARD-MEETING