问题描述
我的数据框看起来像这样:
ID1 ID2 weight
0 2 4 0.5
1 3 7 0.8
2 4 2 0.5
3 7 3 0.8
4 8 2 0.5
5 3 8 0.5
编辑:我添加了几行,以表明应该保留其他相同权重的唯一行。
我认为当我使用熊猫drop_duplicates(subset=['ID1','ID2','weight'],keep=False)
时,它会单独考虑每一行,但不能识别出第0行,第2行,第1行和第4行实际上是相同的值吗?
解决方法
将数据帧沿axis=1
排序,然后将np.unique
与可选参数return_index=True
一起使用以获取唯一元素的索引:
sub = ['ID1','ID2','weight']
idx = np.unique(np.sort(df[sub],1),axis=0,return_index=True)[1]
df1 = df.iloc[sorted(idx)]
@anky建议的替代方法:
df1 = df[~pd.DataFrame(np.sort(df[sub],index=df.index).duplicated()]
print(df1)
ID1 ID2 weight
0 2 4 0.5
1 3 7 0.8
4 8 2 0.5
5 3 8 0.5
,
这可行,但有点怪异。从应该成对的列中创建集合并转换为元组以获取可哈希的类型
df['new'] = df[['ID1','ID2']].apply(lambda x: tuple(set(x)),axis=1)
df.drop_duplicates(subset=['new','weight'],keep=False)
出局:
ID1 ID2 weight new
4 8 2 0.5 (8,2)
5 3 8 0.5 (8,3)