我有一个 MultiIndex Pandas DataFrame,如下所示:
+---+------------------+----------+---------+--------+-----------+------------+---------+-----------+
| | VECTOR | SEGMENTS | OVERALL | INDIVIDUAL |
| | | | TIP X | TIP Y | CURVATURE | TIP X | TIP Y | CURVATURE |
| 0 | (TOP, TOP) | 2 | 3.24 | 1.309 | 44 | 1.62 | 0.6545 | 22 |
| 1 | (TOP, BOTTOM) | 2 | 3.495 | 0.679 | 22 | 1.7475 | 0.3395 | 11 |
| 2 | (BOTTOM, TOP) | 2 | 3.495 | -0.679 | -22 | 1.7475 | -0.3395 | -11 |
| 3 | (BOTTOM, BOTTOM) | 2 | 3.24 | -1.309 | -44 | 1.62 | -0.6545 | -22 |
+---+------------------+----------+---------+--------+-----------+------------+---------+-----------+
如何根据 'OVERALL'
下包含的所有列删除重复项或'INDIVIDUAL'
?所以如果我选择'INDIVIDUAL'
从 TIP X
的值中删除重复项, TIP Y
,和CURVATURE
下INDIVIDUAL
必须全部匹配才能重复吗?
此外,正如您从表 1
中看到的那样和2
是关于 x 轴简单镜像的重复项。这些也必须被删除。
另外,我可以将 OVERALL
居中吗?和INDIVIDUAL
标题?
编辑:frame.drop_duplicates(subset=['INDIVIDUAL'], inplace=True)
产生KeyError: Index(['INDIVIDUAL'], dtype='object')
最佳答案
您可以将 pandas .drop_duplicates
传递给多索引列的元组子集:
df.drop_duplicates(subset=[
('INDIVIDUAL', 'TIP X'),
('INDIVIDUAL', 'TIP Y'),
('INDIVIDUAL', 'CURVATURE')
])
或者,如果您的行索引是唯一的,您可以使用以下方法来节省一些输入:
df.loc[df['INDIVIDUAL'].drop_duplicates().index]
更新:
正如您在评论中所建议的,如果您想对数据框进行操作,您可以内联执行:
df.loc[df['INDIVIDUAL'].abs().drop_duplicates().index]
或者对于非pandas函数,您可以使用.transform
:
df.loc[df['INDIVIDUAL'].transform(np.abs).drop_duplicates().index]
关于python - 根据 MultiIndex DataFrame 中的第一级列删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58025433/