【问题标题】:Pandas add value to inner level of hierarchical indexPandas 为分层索引的内层增加价值
【发布时间】:2017-07-24 19:43:22
【问题描述】:

我有一个带有分层索引 (MultiIndex) 的 Pandas DataFrame。我通过对“cousub”和“year”的值进行分组来创建这个 DataFrame。

annualMed = df.groupby(["cousub", "year"])[["ratio", "sr_val_transfer"]].median().round(2)
print annualMed.head(8)    

                      ratio  sr_val_transfer
cousub          year                        
Allen Park city 2013   0.51          75000.0
                2014   0.47          85950.0
                2015   0.47          95030.0
                2016   0.45         102500.0
Belleville city 2013   0.49         113900.0
                2014   0.55         114750.0
                2015   0.53         149000.0
                2016   0.48         121500.0    

我想在“年份”级别添加一个“整体”值,然后我可以使用仅基于“cousub”分组的值填充该值,即不包括“年份”。我希望结果如下所示

                      ratio  sr_val_transfer
cousub          year                        
Allen Park city 2013   0.51          75000.0
                2014   0.47          85950.0
                2015   0.47          95030.0
                2016   0.45         102500.0
             Overall   0.50          90000.0
Belleville city 2013   0.49         113900.0
                2014   0.55         114750.0
                2015   0.53         149000.0
                2016   0.48         121500.0 
             Overall   0.50         135000.0

如何将此新项目添加到 MultiIndex 的“年”级别?

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    如果您只想显式添加这两列,您可以使用loc 指定所有 MultiIndex 级别。

    df.loc[('Allen Park city', 'Overall'), :] = (0.50, 90000.)
    df.loc[('Belleville city', 'Overall'), :] = (0.50, 135000.)
    

    如果您有一个完整的列表 城市想要添加此行,那么这会有点乏味。也许你可以append 另一个带有overall 值的DataFrame,并进行一些索引操作。

    (df.reset_index()
       .append(pd.DataFrame([['Allen Park city', 'Overall', 0.5, 90000.], 
                             ['Belleville city', 'Overall', 0.5, 135000.]], 
                             columns=list(df.index.names) + list(df.columns)))
       .set_index(df.index.names)
       .sort_index())
    

    演示

    方法一(小写)

    >>> df.loc[('Allen Park city', 'Overall'), :] = (0.50, 90000.)
    
    >>> df.loc[('Belleville city', 'Overall'), :] = (0.50, 135000.)
    
    >>> df.sort_index()
    
                             ratio  sr_val_transfer
    cousub          year                           
    Allen Park city 2013      0.51          75000.0
                    2014      0.47          85950.0
                    2015      0.47          95030.0
                    2016      0.45         102500.0
                    Overall   0.50          90000.0
    Belleville city 2013      0.49         113900.0
                    2014      0.55         114750.0
                    2015      0.53         149000.0
                    2016      0.48         121500.0
                    Overall   0.50         135000.0
    

    方法二(大写)

    >>> (df.reset_index()
           .append(pd.DataFrame([['Allen Park city', 'Overall', 0.5, 90000.], 
                                 ['Belleville city', 'Overall', 0.5, 135000.]], 
                                 columns=list(df.index.names) + list(df.columns)))
           .set_index(df.index.names)
           .sort_index())
    
                             ratio  sr_val_transfer
    cousub          year                           
    Allen Park city 2013      0.51          75000.0
                    2014      0.47          85950.0
                    2015      0.47          95030.0
                    2016      0.45         102500.0
                    Overall   0.50          90000.0
    Belleville city 2013      0.49         113900.0
                    2014      0.55         114750.0
                    2015      0.53         149000.0
                    2016      0.48         121500.0
                    Overall   0.50         135000.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-12
      • 2021-02-03
      • 2020-09-01
      • 2014-09-27
      • 1970-01-01
      • 2021-04-14
      • 2018-04-25
      • 2013-01-08
      相关资源
      最近更新 更多