我有以下熊猫数据框:
df=pd.DataFrame({0:["a","b","c","d"], 1:["e","f","g",None], 2:["h",None,None,None]})
0 1 2
0 a e h
1 b f None
2 c g None
3 d None None
我想用一个列创建一个新的DataFrame,其中每一行都是一个连接字符串,并用分隔符“,”:
0
0 a,e,h
1 b,f
2 c,g
3 d
对于单行,我可以使用
df.iloc[0,:].str.cat(sep=",")
但是如何在不使用for循环的情况下(如果可能的话)将其应用于整个DataFrame
答案 0 :(得分:4)
for i, r in df.iterrows():
print(r.str.cat(sep=","))
作为新数据框:
ndf = pd.DataFrame([r.str.cat(sep=",") for i, r in df.iterrows()])
print(ndf)
0
0 a,e,h
1 b,f
2 c,g
3 d
答案 1 :(得分:2)
您可以使用:
df.apply(lambda x: ','.join(x.dropna()), axis=1)
输出:
0 a,e,h
1 b,f
2 c,g
3 d
dtype: object
答案 2 :(得分:2)
默认情况下,堆叠会删除null。跟进groupby
上的level=0
df.stack().groupby(level=0).apply(','.join)
0 a,e,h
1 b,f
2 c,g
3 d
dtype: object
要复制OP的输出,请使用to_frame
df.stack().groupby(level=0).apply(','.join).to_frame(0)
0
0 a,e,h
1 b,f
2 c,g
3 d