pandas包含两列的唯一值

问题描述 投票:1回答:1

我找不到任何优雅的方法来从列A和列B中选择唯一的行,但不是联合而不是在序列中。这是为了保持这两列中唯一值的“包含”交叉。

我的目标是在AB列中保留尽可能多的唯一值。这些专栏是联合考虑的,但我正在寻找他们价值观的所有独特“组合”......

示例数据帧

df1 = pd.DataFrame({"A": [ "A1", "A2", "A2", "A3", "A3", ],
                    "B": [ "B1", "B1", "B2", "B3", "B1", ], },
                   index=[ 0, 1, 2, 3, 4, ])

结果:

    A   B
0  A1  B1
1  A2  B1
2  A2  B2
3  A3  B3
4  A3  B1

这没什么用处......

df2 = df1.drop_duplicates( subset=[ "A", "B", ], keep="first", inplace=False, )

结果:

    A   B
0  A1  B1
1  A2  B1
2  A2  B2
3  A3  B3
4  A3  B1

下面的代码留下了重复的B1,可以在drop_duplicates列上使用B删除,但随后A2也将被删除,如果它与B2存在于一行中,则可以保留,因为它位于原始数据帧的index=2

df3 = df1.drop_duplicates( subset=[ "A", ], keep="first", inplace=False, )

结果:

    A   B
0  A1  B1
1  A2  B1
3  A3  B3

如上所述A2被删除了,但是有一个选项可以保留它,如果它与B2存在于一行中,就像在原始数据帧的index=2那样。

df4 = df3.drop_duplicates( subset=[ "B", ], keep="first", inplace=False, )

    A   B
0  A1  B1
3  A3  B3

期望的结果:

    A   B
0  A1  B1
1  A2  B2
2  A3  B3

所以我的目标是在AB列中保留尽可能多的唯一值。这些专栏是联合考虑的,但我正在寻找他们价值观的所有独特“组合”......

python pandas filter unique drop-duplicates
1个回答
-1
投票

试试以下代码:

df1.drop_duplicates( subset=[ "A" and "B"], keep="first", inplace=False, )

输出:

    A   B
0   A1  B1
2   A2  B2
3   A3  B3
© www.soinside.com 2019 - 2024. All rights reserved.