【问题标题】:Concatening string vertically in a DataFrame [duplicate]在DataFrame中垂直连接字符串[重复]
【发布时间】:2022-01-01 21:38:23
【问题描述】:

给定一个文本类型的数据框,我想创建一个新列,该列由特定行的所有列的串联组成(如图所示)

本例的数据框由以下给出:

  df= pd.DataFrame({'A':['hello word','how are u doing'],'B':['hey!','im doing great'],'C':['lol','lmao']})

这可以通过 df['Joined] = df['A']+df['B']+df['C'],但我希望它适用于不同数量的列。我用两种不同的方式解决了这个问题:

1.

 df['Joined']=''
    for col in du.columns:
        df['Joined']+= ' '+ df[col]
  1. l = 列表() 对于索引,du.iterrows() 中的行: l.append(' '.join([x for x in row])) du['已加入'] = l

我想知道是否有更优雅的方式来做到这一点(并且更有效)

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    试试:

    df['Joined'] = df.apply(' '.join, axis=1)
    print(df)
    
    # Output
                     A               B     C                               Joined
    0       hello word            hey!   lol                  hello word hey! lol
    1  how are u doing  im doing great  lmao  how are u doing im doing great lmao
    

    更新

    如果我希望“加入”列是单词列表而不是串联

    df['Joined'] = df.apply(list, axis=1)
    print(df)
    
    # Output
                     A               B     C                                   Joined
    0       hello word            hey!   lol                  [hello word, hey!, lol]
    1  how are u doing  im doing great  lmao  [how are u doing, im doing great, lmao]
    

    【讨论】:

    • 如果我希望“已加入”列成为单词列表而不是串联。有没有像你这样一步到位的方法?显然这解决了问题 df['Joined'] = df.apply(' '.join, axis=1) df['Joined'] = df['Joined'].apply(lambda x: x.split())但如果可能的话,我希望它一次申请
    • @Román。我更新了我的答案,你能检查一下吗?如果这适合您的需要,请考虑accept the answer
    • 我注意到在axis = 1上应用列表后,我应该标记我的话。这就是我所做的``` def ldaparser(df): data_words = df.apply(list, axis=1) data_words = data_words.apply(lambda corpus : [word for sentence in corpus for word in sentence.split()] ) 返回 data_words ```
    【解决方案2】:

    你可以用 lambda 函数做你想做的事

    df['joined'] = df.apply(lambda r: ' '.join(str(r[col]) for col in df.columns), axis=1)
    

    【讨论】:

      最近更新 更多