【问题标题】:pandas multi-index how to mask the data by the second levelpandas多索引如何通过二级屏蔽数据
【发布时间】:2016-08-05 02:07:37
【问题描述】:

我有一个这样的多索引数据框:

Date      Period     Value \n
20130101    0          12 \n
20130101    1          13
20130102    0          13
20130102    1          14

第一级是日期,第二级是期间。我想将周期不为零的值设置为零,输出将是这样的:

Date      Period     Value
20130101    0          12
20130101    1          0
20130102    0          13
20130102    1          0

如果第二级是列而不是索引,则解决方案很简单df.Value.loc[df.Period == 0] =0

有没有办法只使用索引来实现这一点?

【问题讨论】:

    标签: python pandas indexing dataframe


    【解决方案1】:

    试试这个:

    df.loc[df.index.get_level_values('Period') != 0, 'Value'] = 0
    

    解释:

    In [5]: df
    Out[5]:
                     Value
    Date     Period
    20130101 0          12
             1          13
    20130102 0          13
             1          14
    
    In [6]: df.index.get_level_values('Period')
    Out[6]: Int64Index([0, 1, 0, 1], dtype='int64', name='Period')
    
    In [7]: df.index.get_level_values('Period') != 0
    Out[7]: array([False,  True, False,  True], dtype=bool)
    
    In [8]: df[df.index.get_level_values('Period') != 0]
    Out[8]:
                     Value
    Date     Period
    20130101 1          13
    20130102 1          14
    
    In [9]: df.loc[df.index.get_level_values('Period') != 0, 'Value'] = 0
    
    In [10]: df
    Out[10]:
                     Value
    Date     Period
    20130101 0          12
             1           0
    20130102 0          13
             1           0
    

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 2013-11-30
      • 1970-01-01
      • 2019-10-27
      • 2018-05-20
      • 2016-01-16
      相关资源
      最近更新 更多