【问题标题】:Create a new column that is the concatenation of all preceeding columns [duplicate]创建一个新列,它是所有先前列的串联[重复]
【发布时间】:2019-07-03 03:39:38
【问题描述】:

我想连接由空格 (" ") 分隔的 pandas 数据框中的所有列。除了 df['newcolumn'] = df['a'] + " " df['b'] + " " ...

a   b   c   combined
1   2   3   1 2 3
a   d   3   a d 3
p   0   k   p 0 k

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    lambda 可以与axis=1 一起使用

    import pandas as pd
    df = pd.DataFrame({'a':['1','a','p'], 
                 'b':[2,'d',0],
                 'c':[3,3,'k']})
    df=df.astype(str)
    df['combined']=df[df.columns].apply(lambda x: ' '.join(x), axis=1)
    

    【讨论】:

      【解决方案2】:

      我不认为你这样做的方式有什么问题,但另一种方式(也许更 Pythonic?)是:

      df['newcolumn'] = df[['a', 'b', 'c']].apply(lambda x: ' '.join(x), axis=1)
      

      使其更适用于大 df:

      df['newcolumn'] = df.iloc[:,0:3].apply(lambda x: ' '.join(x), axis=1) 
      

      iloc 中的 0:3 只是列索引 [0,1,2]。您可以通过选择适当的索引对任意选择的列执行此操作。

      【讨论】:

      • 这很完美,我有一个 20 列长的数据框,所以最后一个结果真的很神奇!
      【解决方案3】:

      它将使最后一列成为所有值的列表,但您可以使用以下内容:

      df['combined'] = df.apply(lambda x: x.tolist(), axis=1)
      

      输出如下:

      a   b   c   combined
      1   2   3   [1,2,3]
      a   d   3   [a,d,3]
      p   0   k   [p,0,k]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-21
        • 2019-06-28
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多