根据附加列的偏好从熊猫数据框中过滤重复项

dyl*_*kot 2 python pandas

我想从数据框中过滤 X 列中包含重复项的行。但是,如果 X 中的某个值存在重复项,我想根据另一列 Y 的值优先选择其中一个值。例如:

import pandas as pd
print pd.__version__
x = pd.DataFrame([
    ['best', 'a', 'x'],
    ['worst', 'b', 'y'],
    ['best', 'c', 'x'],
    ['worst','d', 'y'],
    ['best','d', 'y'],
    ['worst','d', 'y'],
    ['best','d', 'z'],
    ['best','d', 'z'],
], columns=['a', 'b', 'c'])
print x
x.drop_duplicates(cols='c', inplace=True)
print x

       a  b  c
0   best  a  x
1  worst  b  y
2   best  c  x
3  worst  d  y
4   best  d  y
5  worst  d  y
6   best  d  z
7   best  d  z

       a  b  c
0   best  a  x
1  worst  b  y
6   best  d  z
Run Code Online (Sandbox Code Playgroud)

我想优先考虑列 a 等于最佳的重复项。这将给出结果:

       a  b  c
0   best  a  x
4   best  d  y
6   best  d  z
Run Code Online (Sandbox Code Playgroud)

知道在熊猫中执行此操作的正确方法是什么吗?是否有比仅对行进行排序以删除除第一次出现的重复项之外的所有行都可以满足您的要求的更通用方法?

And*_*gan 5

我认为更直接的方法是首先对 DataFrame 进行排序,然后删除保留第一个条目的重复项。这是非常健壮的(这里,'a' 是一个具有两个值的字符串,但是如果有更多的字符串值要排序,您可以应用一个函数从字符串中生成一个整数列)。

x = x.sort_values(['a']).drop_duplicates(cols='c')
Run Code Online (Sandbox Code Playgroud)