【问题标题】:Concatenating DataFrames with similar and disjoint columns连接具有相似和不相交列的 DataFrame
【发布时间】:2018-05-31 23:09:41
【问题描述】:

为了便于讨论,对问题进行了简化。

获取 3 个具有相似和不相交列但列值相同的数据框。如何以没有重复列、保留所有唯一列(即不进行内部连接)以及如果列值相同则不创建新行的方式连接它们?

单个数据框:

df1:

    a  b  c
0   1  2  3
1  11 22 33

df2:

    b  c  d
0   2  3  4
1  22 33 44

df3:

    c  d  e
0   3  4  5
1  33 44 55

期望的输出:

    a   b   c   d   e
0   1   2   3   4   5
1  11  22  33  44  55

但是,只需使用

pd.concat([df1, df2, df3], axis=1)

包括重复的列。

【问题讨论】:

    标签: python join dataframe concatenation


    【解决方案1】:

    选项 1
    使用concat + groupby -

    pd.concat([df1, df2, df3], 1).groupby(axis=1, level=0).first()
    
        a   b   c   d   e
    0   1   2   3   4   5
    1  11  22  33  44  55
    

    选项 2
    merge -

    df1.merge(df2).merge(df3)
    
        a   b   c   d   e
    0   1   2   3   4   5
    1  11  22  33  44  55
    

    一般来说,对于n 数据帧,如果您有它们的列表,您可以使用循环执行 n 路合并 -

    df_list = [df1, df2, df3]
    
    df = df_list[0]
    
    for d in df_list[1:]:
        df = df.merge(d)
    
    df
        a   b   c   d   e
    0   1   2   3   4   5
    1  11  22  33  44  55
    

    【讨论】:

    • 我有 6 个数据框,所以为了代码清晰,我想避免合并。我喜欢这个 groupby 选项!
    • @Lisle 啊,我想可能是这样。我确实添加了一个通用合并选项,但最后 groupby 操作是最好的,如果跨列的值相同。
    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多