如何在匹配条件的 2 列中获取具有相同值的行,而在其他两列中获取具有不同值的行
How do I get rows with same values in 2 columns who match a condition and with a different value in the other two
我有一个数据框,如下例所示:
A B C D E
1 foo one 0 1 0
2 foo one 1 2 1
..........
103 foo two 2 3 1
54 foo two 3 4 1
..........
25 bar three 4 15 0
96 bar three 5 16 1
..........
67 bar four 6 17 0
111 bar five 7 18 1
我的预期输出:
A B C D E
1 foo one 0 1 0
2 foo one 1 2 1
..........
25 bar three 4 15 0
96 bar three 5 16 1
..........
解释:
(这是两个相互连接的数据帧,E 列标识特定行来自哪个集合,0
表示“set_0”,1
对于“set_1”。我现在想查看两个数据框中所有列具有相同值的行,两列除外。)
在索引为 1 和 2 的行中,A 列和 B 列的值相同,set_1 和 set_0 的值相同,但 C 和 D 中的值不同。所以,这些是我想看的专栏。在索引为 103 和 54 的行中,A 列和 B 列的行确实匹配,但来自同一组。所以,我不想要这些行。在索引为 25 和 96 的行中,我在 A 列和 B 列中具有相同的值,从 set_1 到 set_0。所以,我想要这些行。索引为 67 和 111 的行在 A 列和 B 列中具有不同的值,但是属于不同的集合,所以我不想要这些行。
我已经尝试了 groupby
和 drop_duplicates
,但是我无法得到我想要查询属于不同数据集的行的部分,由列 E 的 0 和 1 表示。
我该怎么做?
如果可能,测试 A,B
列中的每个分组在 E
列中是否有 2 个不同的唯一值使用:
df = df[df.groupby(['A','B'])['E'].transform('nunique').eq(2)]
我有一个数据框,如下例所示:
A B C D E
1 foo one 0 1 0
2 foo one 1 2 1
..........
103 foo two 2 3 1
54 foo two 3 4 1
..........
25 bar three 4 15 0
96 bar three 5 16 1
..........
67 bar four 6 17 0
111 bar five 7 18 1
我的预期输出:
A B C D E
1 foo one 0 1 0
2 foo one 1 2 1
..........
25 bar three 4 15 0
96 bar three 5 16 1
..........
解释:
(这是两个相互连接的数据帧,E 列标识特定行来自哪个集合,0
表示“set_0”,1
对于“set_1”。我现在想查看两个数据框中所有列具有相同值的行,两列除外。)
在索引为 1 和 2 的行中,A 列和 B 列的值相同,set_1 和 set_0 的值相同,但 C 和 D 中的值不同。所以,这些是我想看的专栏。在索引为 103 和 54 的行中,A 列和 B 列的行确实匹配,但来自同一组。所以,我不想要这些行。在索引为 25 和 96 的行中,我在 A 列和 B 列中具有相同的值,从 set_1 到 set_0。所以,我想要这些行。索引为 67 和 111 的行在 A 列和 B 列中具有不同的值,但是属于不同的集合,所以我不想要这些行。
我已经尝试了 groupby
和 drop_duplicates
,但是我无法得到我想要查询属于不同数据集的行的部分,由列 E 的 0 和 1 表示。
我该怎么做?
如果可能,测试 A,B
列中的每个分组在 E
列中是否有 2 个不同的唯一值使用:
df = df[df.groupby(['A','B'])['E'].transform('nunique').eq(2)]