【问题标题】:How to merge pandas columns within the same dataframe?如何合并同一数据框中的熊猫列?
【发布时间】:2017-01-06 16:09:46
【问题描述】:

我有以下熊猫数据框:

    colA        ColB       ColC
0               D
1                           G
2   A       
3               B
4   C

如何将其合并到 (*) 中:

    colA
0   D
1   G
2   A
3   B
4   C

到目前为止,我尝试过:

df = pd.DataFrame.merge([df.ColA, df.ColB, df.ColC], how='right')
df

但是,它不起作用。我怎样才能得到 (*)?

【问题讨论】:

    标签: python python-3.x pandas merge


    【解决方案1】:

    你可以使用DataFrame.sum:

    df = df.sum(axis=1)
    

    如果NaN 值你可以先fillna

    df = df.fillna('').sum(axis=1)
    
    print (df)
    0    D
    1    G
    2    A
    3    B
    4    C
    dtype: object
    

    apply - join 的另一个解决方案:

    df = df.apply(''.join, axis=1)
    #df = df.apply(lambda x: ''.join(x), axis=1)
    print (df)
    0    D
    1    G
    2    A
    3    B
    4    C
    dtype: object
    

    使用Series.combine_first 的解决方案,但需要NaN 值:

    print (df)
      colA ColB ColC
    0  NaN    D  NaN
    1  NaN  NaN    G
    2    A  NaN  NaN
    3  NaN    B  NaN
    4    C  NaN  NaN
    
    df = df.colA.combine_first(df.ColB).combine_first(df.ColC)
    print (df)
    0    D
    1    G
    2    A
    3    B
    4    C
    Name: colA, dtype: object
    

    【讨论】:

    • 谢谢我得到:TypeError: join() takes no keyword arguments 与第二个解决方案。
    • 我添加替代解决方案df = df.apply(lambda x: ''.join(x), axis=1)
    • 有趣,你的熊猫版本是什么? print (pd.show_versions())
    • type(df) 是什么?是DataFrame 还是Series
    • 如果系列使用df = df.str.strip()
    猜你喜欢
    • 2021-09-02
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2016-05-05
    • 2018-12-10
    相关资源
    最近更新 更多