代码之家  ›  专栏  ›  技术社区  ›  valenzio

python:pandas将每一行连接成一个字符串

  •  2
  • valenzio  · 技术社区  · 6 年前

    我有以下熊猫数据框:

    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
    

    我想创建一个新的数据框架,其中每一行是一个连接字符串,带有分隔符“:

           0
    0  a,e,h
    1    b,f
    2    c,g
    3      d
    

    我可以用一排

    df.iloc[0,:].str.cat(sep=",")
    

    但是我如何在不使用for循环的情况下将其应用于整个数据帧(如果可能的话)

    3 回复  |  直到 6 年前
        1
  •  2
  •   piRSquared    6 年前

    默认情况下,堆叠会移除空值。跟进 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
    
        2
  •  4
  •   hootnot    6 年前
    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
    
        3
  •  2
  •   Scott Boston    6 年前

    您可以使用:

    df.apply(lambda x: ','.join(x.dropna()), axis=1)
    

    输出:

    0    a,e,h
    1      b,f
    2      c,g
    3        d
    dtype: object