开发者社区 问答 正文

为什么我的多索引数据框有重复的索引值?

我有以下pd.DataFrame,名为df:

               date     cluster_label        value

0 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)
现在,输出是这样的:

                       value

cluster_label date
0 2018-11 1.5

           2018-11     7.0
           2018-11     2.5

1 2018-11 3.0

           2018-11     0.5

2 2018-11 1.0
但这是错误的。我希望输出没有日期列的重复索引。输出应如下所示:

                       value

cluster_label date
0 2018-11 1.5

                       7.0
                       2.5

1 2018-11 3.0

                       0.5

2 2018-11 1.0
我做错了什么,如何更改我的代码以获得所需的输出?

展开
收起
一码平川MACHEL 2019-01-22 16:39:12 1856 分享 版权
1 条回答
写回答
取消 提交回答
  • 一种选择是附加cumcounted级别:

    df.set_index(df.groupby(level=[0,1]).cumcount(), append=True)

                         value

    cluster_label date
    0 2018-11 0 1.5

                      1    7.0
                      2    2.5

    1 2018-11 0 3.0

                      1    0.5

    2 2018-11 0 1.0

    df.set_index(df.groupby(level=[0,1]).cumcount(), append=True).index

    MultiIndex(levels=[[0, 1, 2], [2018-11], [0, 1, 2]],

    labels=[[0, 0, 0, 1, 1, 2], [0, 0, 0, 0, 0, 0], [0, 1, 2, 0, 1, 0]],

    names=['cluster_label', 'date', None])

    另一个选项(我不建议)是显式屏蔽这些值并重置索引。

    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

                       value

    cluster_label
    0 2018-11 1.5

                         7.0
                         2.5

    1 2018-11 3.0

                         0.5

    2 2018-11 1.0

    2019-07-17 23:26:20
    赞同 展开评论
问答分类:
问答地址: