Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从两列中选择唯一的值_Python_Pandas_Filter_Unique_Drop Duplicates - Fatal编程技术网

Python 从两列中选择唯一的值

Python 从两列中选择唯一的值,python,pandas,filter,unique,drop-duplicates,Python,Pandas,Filter,Unique,Drop Duplicates,我找不到任何优雅的方法从列A和列B中选择唯一的行,但不能同时选择,也不能按顺序选择。这是为了保持这两列中唯一值的包含交集 我的目标是在A列和B列之间保留尽可能多的唯一值。这些列是联合考虑的,但我正在寻找它们的值的所有唯一组合 示例数据帧 df1 = pd.DataFrame({"A": [ "A1", "A2", "A2", "A3", "A3", ], "B": [ "B1", "B1", "B2", "B3", "B1", ], },

我找不到任何优雅的方法从列A和列B中选择唯一的行,但不能同时选择,也不能按顺序选择。这是为了保持这两列中唯一值的包含交集

我的目标是在A列和B列之间保留尽可能多的唯一值。这些列是联合考虑的,但我正在寻找它们的值的所有唯一组合

示例数据帧

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
    A   B
0  A1  B1
1  A2  B1
2  A2  B2
3  A3  B3
4  A3  B1
    A   B
0  A1  B1
1  A2  B1
3  A3  B3
这没什么用

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
    A   B
0  A1  B1
1  A2  B1
2  A2  B2
3  A3  B3
4  A3  B1
    A   B
0  A1  B1
1  A2  B1
3  A3  B3
下面的代码留下了重复的B1,可以稍后使用B列上的drop_duplicates删除,但A2也将被删除,如果它与B2一起出现在一行中,则可以保留它,因为它位于原始数据帧的索引=2处

df3 = df1.drop_duplicates( subset=[ "A", ], keep="first", inplace=False, )
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  B1
2  A2  B2
3  A3  B3
4  A3  B1
    A   B
0  A1  B1
1  A2  B1
2  A2  B2
3  A3  B3
4  A3  B1
    A   B
0  A1  B1
1  A2  B1
3  A3  B3
如上所述,A2被删除,但如果它与B2一起出现在一行中,则可以选择保留它,因为它位于原始数据帧的索引=2处

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

    A   B
0  A1  B1
3  A3  B3
预期结果:

因此,我的目标是在A列和B列之间保留尽可能多的唯一值。这些列是联合考虑的,但我正在寻找它们值的所有唯一组合…

请尝试以下代码:

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

    A   B
0   A1  B1
2   A2  B2
3   A3  B3

如果在原始数据帧['A3',B4']中再添加一行,会发生什么。该行是否也应显示在输出中?现在,我不知道您是在尝试获取具有完全唯一值的最大行数,还是获取捕获所有唯一值的最小行数。我不介意输出中是否出现行['A3',B4',因为我可以在下一步中通过删除A列中的重复项来过滤掉它。我要做的是从A列中获取所有值,但只获取一次,因此此列仅包含唯一值,但与B列中的唯一值成对。现在,如果使用subset=[A,B],则输出包含两个列中唯一的行。如果我先从A列中删除重复项,然后从B列中删除重复项,许多唯一值将丢失。我需要从一列中删除重复项,但要尽可能多地保存B列中的值,反之亦然……可能需要使用networkx.algorithms.matching.max_weight_matching?Alex,你需要两列的唯一值,对吗?那么你怎么认为下面的代码不适用呢?