如何解决在不考虑订单的情况下,检查熊猫行是否唯一
我的数据框看起来像这样:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。