在不同的列中放置无序的重复项

2024-04-25 09:18:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图返回一个df,其中删除了重复的值。我试过使用drop.duplicates(),但是列中的值没有排序。如中所示,这些值是重复的,但顺序不同。你知道吗

例如,使用下面的df,如果我尝试从Item_XItem_Y中删除重复值,它将返回相同的df。其中预期输出将删除第二行。你知道吗

import pandas as pd

d = ({
    'Item_X' : ['Foo','Bar','Bot','Bot','Bar','Foo'],                 
    'Item_Y' : ['Bar','Foo','Foo','Bot','Bar','Foo'],                 
    'Value' : [1,2,3,4,5,6],                      
     })

df = pd.DataFrame(data = d)

df.drop_duplicates(subset=['Item_X','Item_Y'])

预期结果:

  Item_X Item_Y  Value
0    Foo    Bar      1
2    Bot    Foo      3
3    Bot    Bot      4
4    Bar    Bar      5
5    Foo    Foo      6

实际输出(不正确):

  Item_X Item_Y  Value
0    Foo    Bar      1
1    Bar    Foo      2
2    Bot    Foo      3
3    Bot    Bot      4
4    Bar    Bar      5
5    Foo    Foo      6

解决这个问题最有效的方法是什么?你知道吗


Tags: importdataframepandasdffoo排序顺序value
2条回答

您需要沿水平轴对列进行排序,然后获得一个掩码来子集原始帧。下面是如何使用np.sortdf.duplicated来实现这一点:

df[~pd.DataFrame(np.sort(df2[['Item_X', 'Item_Y']], axis=1)).duplicated()]

  Item_X Item_Y  Value
0    Foo    Bar      1
2    Bot    Foo      3
3    Bot    Bot      4
4    Bar    Bar      5
5    Foo    Foo      6

IIUC,使用:

m=pd.DataFrame(np.sort(df[['Item_X','Item_Y']])).duplicated()
df[~m]

  Item_X Item_Y  Value
0    Foo    Bar      1
2    Bot    Foo      3
3    Bot    Bot      4
4    Bar    Bar      5
5    Foo    Foo      6

相关问题 更多 >