根据 MultiIndex DataFrame 中的第一级列删除重复项

Iza*_*ert 5 python dataframe pandas

我有一个 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       |
+---+------------------+----------+---------+--------+-----------+------------+---------+-----------+
Run Code Online (Sandbox Code Playgroud)

如何根据'OVERALL'或下包含的所有列删除重复项'INDIVIDUAL'?因此,如果我选择从、和under'INDIVIDUAL'的值中删除重复项,则必须全部匹配才能使其成为重复项?TIP XTIP YCURVATUREINDIVIDUAL

此外,正如您从表中看到的那样1, 和2是关于 x 轴简单镜像的重复项。这些也必须被丢弃。

另外,我可以将OVERALLINDIVIDUAL标题居中吗?

编辑:frame.drop_duplicates(subset=['INDIVIDUAL'], inplace=True)产生KeyError: Index(['INDIVIDUAL'], dtype='object')

Swi*_*ier 5

您可以向 pandas 传递.drop_duplicates多索引列的元组子集:

df.drop_duplicates(subset=[
    ('INDIVIDUAL', 'TIP X'),
    ('INDIVIDUAL', 'TIP Y'),
    ('INDIVIDUAL', 'CURVATURE')
])
Run Code Online (Sandbox Code Playgroud)

或者,如果您的行索引是唯一的,您可以使用以下方法来节省一些输入:

df.loc[df['INDIVIDUAL'].drop_duplicates().index]
Run Code Online (Sandbox Code Playgroud)

更新

正如您在评论中所建议的,如果您想对数据框进行操作,您可以在线执行此操作:

df.loc[df['INDIVIDUAL'].abs().drop_duplicates().index]
Run Code Online (Sandbox Code Playgroud)

或者对于非 pandas 函数,您可以使用.transform

df.loc[df['INDIVIDUAL'].transform(np.abs).drop_duplicates().index]
Run Code Online (Sandbox Code Playgroud)