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

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

如果第二层是一列而不是index,那么解决方案将很容易df.Value.loc[df.Period == 0] =0

有没有一种方法可以通过仅使用索引来实现?

最佳答案

试试这个:

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

关于python - Pandas 多索引如何通过第二层掩盖数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36607539/

10-14 17:47