【问题标题】:Concatenate dataframes with multi-index in pandas dataframe在 pandas 数据框中使用多索引连接数据框
【发布时间】:2017-09-11 08:18:28
【问题描述】:

我有两个数据框 df1df2

In [56]: df1.head()
Out[56]: 
                     col7                col8                col9          
                   alpha0        D0    alpha0        D0    alpha0        D0
F35_HC_531d.dat  1.103999  1.103999  1.364399  1.358938  3.171808  1.946894
F35_HC_532d.dat  0.000000  0.000000  1.636934  1.635594  4.359431  2.362530
F35_HC_533d.dat  0.826599  0.826599  1.463956  1.390134  3.860629  2.199387
F35_HC_534d.dat  1.055350  1.020555  3.112200  2.498257  3.394307  2.090668
F52_HC_472d.dat  3.808008  2.912733  3.594062  2.336720  3.027449  2.216112

In [62]: df2.head()
Out[62]: 
                   col7           col8              col9       
                 alpha1 alpha2  alpha1    alpha2  alpha1 alpha2
filename                                                       
F35_HC_532d.dat  1.0850  2.413  0.7914  6.072000  0.8418  5.328
M48_HC_551d.dat  0.7029  4.713  0.7309  2.922000  0.7823  3.546
M24_HC_458d.dat  0.7207  5.850  0.6772  5.699000  0.7135  5.620
M48_HC_552d.dat  0.7179  4.783  0.6481  4.131999  0.7010  3.408
M40_HC_506d.dat  0.7602  2.912  0.8420  5.690000  0.8354  1.910

我想连接这两个数据框。请注意,两者的外部列名称相同,因此我只想在新数据框中查看 4 个子列。我尝试使用 concat 作为:

df = pd.concat([df1, df2], axis = 1, levels = 0)

但这会产生一个数据框,其列的名称从 col7col9 两次(因此数据框有 6 个外部列)。如何将级别 1 中的所有列放在相同的外部列名下?

【问题讨论】:

    标签: python pandas dataframe concatenation multi-index


    【解决方案1】:

    您可以将join与参数how='outer'一起使用

    df1.join(df2, how='outer').sort_index(1)
    

    【讨论】:

    • 不错!我不明白为什么sort_index 去掉了重复的列名。有什么意见吗?
    • @Peaceful 他们还在那里。当您在索引的早期级别中有连续值时,您是 pandas 出于美观原因选择组合表格列
    • 但为什么sort_index 会这样做呢?或者这甚至在一般情况下是正确的?例如,如果有一个函数merge_repeated_columns,那是可以理解的。我错过了什么明显的东西吗?
    • @Peaceful 如果它没有排序,那么你就不会将同一第一级的所有列放在一起。然后你必须显示每个列标题,因为它没有直观意义。只有排序后才能让它看起来漂亮
    【解决方案2】:

    您可以添加sort_index 用于排序列:

    df = pd.concat([df1, df2], axis = 1, levels=0).sort_index(axis=1)
    print (df)
                         col7                               col8            \
                           D0    alpha0  alpha1 alpha2        D0    alpha0   
    F35_HC_531d.dat  1.103999  1.103999     NaN    NaN  1.358938  1.364399   
    F35_HC_532d.dat  0.000000  0.000000  1.0850  2.413  1.635594  1.636934   
    F35_HC_533d.dat  0.826599  0.826599     NaN    NaN  1.390134  1.463956   
    F35_HC_534d.dat  1.020555  1.055350     NaN    NaN  2.498257  3.112200   
    F52_HC_472d.dat  2.912733  3.808008     NaN    NaN  2.336720  3.594062   
    M24_HC_458d.dat       NaN       NaN  0.7207  5.850       NaN       NaN   
    M40_HC_506d.dat       NaN       NaN  0.7602  2.912       NaN       NaN   
    M48_HC_551d.dat       NaN       NaN  0.7029  4.713       NaN       NaN   
    M48_HC_552d.dat       NaN       NaN  0.7179  4.783       NaN       NaN   
    
                                           col9                           
                     alpha1    alpha2        D0    alpha0  alpha1 alpha2  
    F35_HC_531d.dat     NaN       NaN  1.946894  3.171808     NaN    NaN  
    F35_HC_532d.dat  0.7914  6.072000  2.362530  4.359431  0.8418  5.328  
    F35_HC_533d.dat     NaN       NaN  2.199387  3.860629     NaN    NaN  
    F35_HC_534d.dat     NaN       NaN  2.090668  3.394307     NaN    NaN  
    F52_HC_472d.dat     NaN       NaN  2.216112  3.027449     NaN    NaN  
    M24_HC_458d.dat  0.6772  5.699000       NaN       NaN  0.7135  5.620  
    M40_HC_506d.dat  0.8420  5.690000       NaN       NaN  0.8354  1.910  
    M48_HC_551d.dat  0.7309  2.922000       NaN       NaN  0.7823  3.546  
    M48_HC_552d.dat  0.6481  4.131999       NaN       NaN  0.7010  3.408  
    

    【讨论】:

    • 太棒了!你能解释一下这是如何工作的吗?
    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2021-02-07
    • 2017-08-19
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多