python-如何删除每行(熊猫)中的重复列表?

时间:2018-10-23 13:02:40

标签: python pandas list

我在每行中都有一个列表,我想通过保留分数中的最高值来删除重复的元素。

这是我来自数据帧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

我尝试使用分组依据并设置分数=最大值,但不起作用

2 个答案:

答案 0 :(得分:1)

首先,我认为在good idea中使用list大熊猫不是这样。

如果将列表转换为具有元组的帮助列,然后使用sort_valuesdrop_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