Python 为什么我的多索引数据帧有重复的索引值?
我有以下名为df的pd.DataFrame:Python 为什么我的多索引数据帧有重复的索引值?,python,pandas,dataframe,multi-level,Python,Pandas,Dataframe,Multi Level,我有以下名为df的pd.DataFrame: 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 201
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
我做错了什么?如何更改代码以获得所需的输出?一个选项是附加
cumcount
ed级别:
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