【问题标题】:Combine multiple columns as a string in python在python中将多列组合为一个字符串
【发布时间】:2023-01-30 21:21:44
【问题描述】:

我正在尝试将数据框中的多个列合并到同一数据框中的新列中。这些列可以有一个字符串值或者是 Na 或 NaN。每当一列是 Na/NaN 时,我希望这些列不包含在最终字符串中。

例如。

       a        b        c        d       RESULT
0      AA       BB       CC       DD      AA;BB;CC;DD
1      ab       Na       cd       da      ab;cd;da
2      Na       xx       Na       Na      xx
3      Na       Na       Na       Na      Na

我已经测试了多个功能。

  1. df['RESULT'] = df['a'] + ";" + df['b'] + ... 不起作用,因为它仍然会嵌套 Na。
  2. df['RESULT'] = ";".join(df['a'],df['b],...)不起作用,因为 join 只需要一个参数(我有 4 个)
  3. df['RESULTS'] = [f"{a};{b};{c}" for a,b,c in zip(df['a'],df['b'], df['b'])]不起作用,因为它将 Na 的字符串添加到输出中
  4. Pandas str.cat(): df['fill_name']= df['RESULTS'].str.cat(df['a'],sep=";").str.cat(df['b'],sep=";")... 是最接近我要找的,但是只要一列中有一个 Na,整个输出就是 Na。

    最后我正在研究类似"TEXTJOIN" function in Excel.的东西

    提前谢谢了!

【问题讨论】:

    标签: python pandas dataframe join concatenation


    【解决方案1】:

    利用:

    df['RESULT'] = df[['a','b','c','d']].agg(lambda x: ";".join(x.dropna()), axis=1).replace('',np.nan)
    print (df)
         a    b    c    d       RESULT
    0   AA   BB   CC   DD  AA;BB;CC;DD
    1   ab  NaN   cd   da     ab;cd;da
    2  NaN   xx  NaN  NaN           xx
    3  NaN  NaN  NaN  NaN          NaN
    

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 2018-10-01
      • 2015-12-20
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      相关资源
      最近更新 更多