我有一个多索引的数据框,如下所示:
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
。
有没有办法实现这一点,只需使用索引?
答案 0 :(得分:3)
试试这个:
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