Python:Pandas将每一行连接成一个字符串

时间:2018-07-10 13:13:31

标签: python string pandas concatenation

我有以下熊猫数据框:

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

3 个答案:

答案 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