我的数据如下:(我有28列(
col1 col2 col3 col4 col5
AA 0 0 B 0
0 CC 0 D 0
0 0 E F G
我正在尝试合并这些列以获得这样的输出:
col1 col2 col3 col4 col5 col6
AA 0 0 B 0 AA;B
0 C 0 DD 0 C;DD
0 0 E F G E;F;G
我只想将非数字字符合并到新列中。
我试过这样:
cols=['col1','col2', 'col3', 'col4', 'col5']
df2["col6"] = df2[cols].apply(lambda x: ';'.join(x.dropna()), axis=1)
但它并没有去掉零。我知道这是一个小小的变化,但我想不通。
感谢
通过where()
方法和apply()
方法尝试:
df2["col6"]=df2.where((df2!='0')&(df2!=0)).apply(lambda x: ';'.join(x.dropna()), axis=1)
如果有0以外的数字(包括0(,则使用:
df2["col6"]=(df2.where(df2.apply(lambda x:x.str.isalpha(),1))
.apply(lambda x: ';'.join(x.dropna()), axis=1))
使用您显示的示例,请尝试以下操作。试图在这里修复OP的尝试。简单的解释是,主要的更改是使用条件x[x!=0]
在OP的尝试代码(联接函数(中生成布尔掩码。
df2['col6'] = df2[cols].apply(lambda x: ';'.join(x[x!=0]), axis=1)