【问题标题】:Python: Pandas Concatenate each row into a stringPython:Pandas 将每一行连接成一个字符串
【发布时间】:2018-12-18 08:36:31
【问题描述】:

我有以下 Pandas 数据框:

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

【问题讨论】:

    标签: python string pandas concatenation


    【解决方案1】:

    默认情况下,堆叠会删除空值。跟进groupbylevel=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】:
      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】:

        你可以使用:

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

        输出:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-15
          • 1970-01-01
          • 1970-01-01
          • 2012-02-02
          • 2022-12-17
          • 1970-01-01
          • 2015-09-18
          相关资源
          最近更新 更多