【问题标题】:Joining two MultiIndex DataFrames with different number of index levels连接两个具有不同索引级别数的 MultiIndex DataFrame
【发布时间】:2018-10-15 19:42:11
【问题描述】:

我有一个pandas 数据框:

                               emp    laborforce  emp_rate
occ statefip quarter                                      
10  1        0        6.561213e+06  7.017537e+06  0.934974
             4        8.580723e+06  9.114996e+06  0.941385
             8        8.588012e+06  9.102831e+06  0.943444
             12       2.093297e+06  2.220923e+06  0.942535
    2        0        6.561208e+06  7.017527e+06  0.934974

现在我想将每个(occ, statefip) 的平均emp_rate 合并到这个数据集中。我试过了

df2 = df1.groupby(level=[0, 1])['emp_rate'].mean()
df2.name = 'emp_rate_mean'
df1.join(df2, how='inner')
NotImplementedError: merging with more than one level overlap on a multi-index is not implemented

显然,如果第二个数据帧是单索引的,则这种类型的 join 会从 pandas 0.14 开始工作。它不是。在这种情况下,正确的方法是什么?

【问题讨论】:

    标签: python pandas dataframe join multi-index


    【解决方案1】:

    使用GroupBy.transform():

    In [102]: df['emp_rate_avg'] = df.groupby(level=[0, 1])['emp_rate'].transform('mean')
    
    In [103]: df
    Out[103]:
                                 emp  laborforce  emp_rate  emp_rate_avg
    occ  statefip quarter
    10.0 1.0      0        6561213.0   7017537.0  0.934974      0.940584
                  4        8580723.0   9114996.0  0.941385      0.940584
                  8        8588012.0   9102831.0  0.943444      0.940584
                  12       2093297.0   2220923.0  0.942535      0.940584
         2.0      0        6561208.0   7017527.0  0.934974      0.934974
    

    【讨论】:

    • 所以这通过建议transform() 来规避问题,并且永远不会“丢失”索引中的维度。如果我得到了 .mean() 数据集并且必须以某种方式合并它怎么办?
    • @FooBar, df1.reset_index('quarter').join(df2).set_index('quarter', append=True) - 我不知道更好/更有效的方法...
    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 2013-03-16
    • 2021-03-12
    • 2020-11-25
    • 2022-10-18
    • 2020-06-05
    • 1970-01-01
    • 2020-10-27
    相关资源
    最近更新 更多