首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的多索引数据有重复的索引值?

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

Stack Overflow用户
提问于 2019-01-21 23:36:55
回答 1查看 2K关注 0票数 3

我有一个名为df的pd.DataFrame:

代码语言:javascript
复制
                   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

在设置多级索引或dataframe之前,我执行以下命令将date列转换为只有月份和年份值:

代码语言:javascript
复制
self.df['date'] = self.df['date'].dt.to_period('M')
self.df.set_index(['cluster_label', 'date'], inplace=True)

现在,输出如下:

代码语言:javascript
复制
                           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

但这是不对的。我希望输出没有日期列的重复索引。输出应该如下所示:

代码语言:javascript
复制
                           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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-21 23:41:10

一个选项是附加一个cumcounted级别:

代码语言:javascript
复制
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

哪里,

代码语言:javascript
复制
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])

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

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54299267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档