在不同的列中删除无序的重复项
Drop unordered duplicates across separate columns
我正在尝试 return df
删除重复值。我曾尝试使用 drop.duplicates()
,但 subset
列中的值未排序。如同,这些值是重复的,但它们的顺序不同。
例如,使用下面的 df
,如果我尝试从 Item_X
和 Item_Y
中删除重复值,它将 return 相同 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
解决这个问题最有效的方法是什么?
您需要沿水平轴对列进行排序,然后获取掩码以对原始帧进行子集化。以下是如何使用 np.sort
和 df.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
我正在尝试 return df
删除重复值。我曾尝试使用 drop.duplicates()
,但 subset
列中的值未排序。如同,这些值是重复的,但它们的顺序不同。
例如,使用下面的 df
,如果我尝试从 Item_X
和 Item_Y
中删除重复值,它将 return 相同 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
解决这个问题最有效的方法是什么?
您需要沿水平轴对列进行排序,然后获取掩码以对原始帧进行子集化。以下是如何使用 np.sort
和 df.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