我想根据第二个索引重复删除以下分层索引的数据帧。我还没有找到一种方法来做到这一点。有一个,pandas.Multiindex.drop_duplicates()但是它不允许您指定级别。
一个示例数据框是:
In [5]: df
Out[5]:
given_name surname dob phone_number_1_clean
985 2414 1.0 1.0 0.0 1.0
122864 1.0 1.0 0.0 0.0
167863 1.0 1.0 0.0 0.0
418911 1.0 1.0 0.0 0.0
516362 1.0 1.0 0.0 0.0
2414 122864 1.0 1.0 0.0 0.0
167863 1.0 1.0 1.0 0.0
418911 1.0 1.0 1.0 0.0
516362 1.0 1.0 0.0 0.0
122864 167863 1.0 1.0 0.0 1.0
418911 1.0 1.0 0.0 1.0
516362 1.0 1.0 0.0 1.0
167863 418911 1.0 1.0 1.0 1.0
516362 1.0 1.0 0.0 1.0
418911 516362 1.0 1.0 0.0 1.0
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
given_name surname dob phone_number_1_clean
985 2414 1.0 1.0 0.0 1.0
122864 1.0 1.0 0.0 0.0
167863 1.0 1.0 0.0 0.0
418911 1.0 1.0 0.0 0.0
516362 1.0 1.0 0.0 0.0
Run Code Online (Sandbox Code Playgroud)
用途get_level_values为选择第二级MultiIndex与duplicated布尔面具,反转条件和过滤器通过boolean indexing:
df = df[~df.index.get_level_values(1).duplicated()]
print (df)
given_name surname dob phone_number_1_clean
985 2414 1.0 1.0 0.0 1.0
122864 1.0 1.0 0.0 0.0
167863 1.0 1.0 0.0 0.0
418911 1.0 1.0 0.0 0.0
516362 1.0 1.0 0.0 0.0
Run Code Online (Sandbox Code Playgroud)
详细说明:
print (df.index.get_level_values(1))
Int64Index([ 2414, 122864, 167863, 418911, 516362, 122864, 167863, 418911,
516362, 167863, 418911, 516362, 418911, 516362, 516362],
dtype='int64')
print (df.index.get_level_values(1).duplicated())
[False False False False False True True True True True True True
True True True]
print (~df.index.get_level_values(1).duplicated())
[ True True True True True False False False False False False False
False False False]
Run Code Online (Sandbox Code Playgroud)