【问题标题】:Join pandas series of multIndex加入pandas系列的multiindex
【发布时间】:2017-06-03 10:14:20
【问题描述】:

我怎样才能加入由(A, B) 多索引的Series A 和由A 索引的Series B

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    目前唯一的方法是将索引放在一个共同的基础上——例如将series_A MultiIndex 的B 级别移动到一列,以便series_Aseries_B 仅由A 索引:

    import pandas as pd
    
    series_A = pd.Series(1, index=pd.MultiIndex.from_product([['A1', 'A4'],['B1','B2']], names=['A','B']), name='series_A')
    # A   B 
    # A1  B1    1
    #     B2    1
    # A4  B1    1
    #     B2    1
    # Name: series_A, dtype: int64
    
    series_B = pd.Series(2, index=pd.Index(['A1', 'A2', 'A3'], name='A'), name='series_B')
    # A
    # A1    2
    # A2    2
    # A3    2
    # Name: series_B, dtype: int64
    
    tmp = series_A.to_frame().reset_index('B')
    result = tmp.join(series_B, how='outer').set_index('B', append=True)
    print(result)
    

    产量

            series_A  series_B
    A  B                      
    A1 B1        1.0       2.0
       B2        1.0       2.0
    A2 NaN       NaN       2.0
    A3 NaN       NaN       2.0
    A4 B1        1.0       NaN
       B2        1.0       NaN
    

    加入他们的另一种方法是从series_A 中取消堆叠B 级别:

    In [215]: series_A.unstack('B').join(series_B, how='outer')
    Out[215]: 
         B1   B2  series_B
    A                     
    A1  1.0  1.0       2.0
    A2  NaN  NaN       2.0
    A3  NaN  NaN       2.0
    A4  1.0  1.0       NaN
    

    unstackB 索引级别移动到列索引。因此主题是 相同(将索引放在一个共同的基础上),但结果不同。

    【讨论】:

    • 没有你想象的那么明显。
    • reset_index 后跟 set_index 听起来是合法的。但是,我总是想知道为什么join 对系列的操作不如对数据框的灵活。
    猜你喜欢
    • 2019-01-07
    • 2019-11-27
    • 2012-10-13
    • 1970-01-01
    • 2018-02-02
    • 2018-07-25
    • 2020-05-19
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多