我有以下pd.DataFrame,名为df:
               date     cluster_label        value0   2018-11-14 02:16:22                 0          1.5
1   2018-11-14 02:16:22                 0          7.0
2   2018-11-14 02:16:22                 0          2.5
3   2018-11-14 02:16:22                 1          3.0
4   2018-11-14 02:16:22                 1          0.5
5   2018-11-14 02:16:22                 2          1.0
在设置多级索引或数据框之前,我执行以下命令将日期列转换为仅包含月份和年份值:
self.df['date'] = self.df['date'].dt.to_period('M')
self.df.set_index(['cluster_label', 'date'], inplace=True)
现在,输出是这样的:
                       valuecluster_label date                                                                  
0              2018-11     1.5
           2018-11     7.0
           2018-11     2.51 2018-11 3.0
           2018-11     0.52              2018-11     1.0
但这是错误的。我希望输出没有日期列的重复索引。输出应如下所示:
                       valuecluster_label date                                                                  
0              2018-11     1.5
                       7.0
                       2.51 2018-11 3.0
                       0.52              2018-11     1.0
我做错了什么,如何更改我的代码以获得所需的输出?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
一种选择是附加cumcounted级别:
df.set_index(df.groupby(level=[0,1]).cumcount(), append=True)
                     valuecluster_label date            
0             2018-11 0    1.5
                  1    7.0
                  2    2.51 2018-11 0 3.0
                  1    0.52 2018-11 0 1.0
df.set_index(df.groupby(level=[0,1]).cumcount(), append=True).index
另一个选项(我不建议)是显式屏蔽这些值并重置索引。
u = np.where(df.index.duplicated(), '', df.index.get_level_values(1))
df.index = pd.MultiIndex.from_arrays([df.index.get_level_values(0), u])
df
                   valuecluster_label               
0             2018-11    1.5
                     7.0
                     2.51 2018-11 3.0
                     0.52 2018-11 1.0