我在每行中都有一个列表,我想通过保留分数中的最高值来删除重复的元素。
这是我来自数据帧df1的数据
pair score
0 [A , A ] 1.0000
1 [A , F ] 0.9990
2 [A , G ] 0.9985
3 [A , G ] 0.9975
4 [A , H ] 0.9985
5 [A , H ] 0.9990
我希望看到的结果是
pair score
0 [A , A ] 1.0000
1 [A , F ] 0.9990
2 [A , G ] 0.9985
4 [A , H ] 0.9990
我尝试使用分组依据并设置分数=最大值,但不起作用
答案 0 :(得分:1)
首先,我认为在good idea中使用list
大熊猫不是这样。
如果将列表转换为具有元组的帮助列,然后使用sort_values
和drop_duplicates
,则解决方案有效:
df['new'] = df.pair.apply(tuple)
df = df.sort_values('score', ascending=False).drop_duplicates('new')
print (df)
pair score new
0 [A, A] 1.0000 (A, A)
1 [A, F] 0.9990 (A, F)
5 [A, H] 0.9990 (A, H)
2 [A, G] 0.9985 (A, G)
或添加2个新列:
df[['a', 'b']] = pd.DataFrame(df.pair.values.tolist())
df = df.sort_values('score', ascending=False).drop_duplicates(['a', 'b'])
print (df)
pair score a b
0 [A, A] 1.0000 A A
1 [A, F] 0.9990 A F
5 [A, H] 0.9990 A H
2 [A, G] 0.9985 A G
答案 1 :(得分:0)
使用字符串类型的排序值创建新列pair2
,然后删除重复项
将处理是否对具有值[A,G]
和[G,A]
对待他们
df['pair2']=df.pair.map(sorted).astype(str)
df.sort_values('score',ascending=False).drop_duplicates('pair2',keep='first').drop('pair2',axis=1).reset_index(drop=True)
输出:
pair score
[A, A] 1.0000
[A, F] 0.9990
[A, H] 0.9990
[A, G] 0.9985