首页 > 解决方案 > 保留列开始范围内得分最高的行

问题描述

我想将“分数”值最高的行保留在起始值列的 3 个位置内。我有一个如下所示的数据框:

data = {'id':['id1', 'id2', 'id3', 'id4', 'id5', 'id6'],
       'start':[1,12,11,2,20,3],
       'score':[3,1,8,2,5,9]}
df = pd.DataFrame(data, columns=['id', 'start',  'score'])
df = df.sort_values(by='start')

期望的输出:

data = {'id':['id3', 'id5', 'id6'],
       'start':[11,20,3],
       'score':[8,5,9]}
output = pd.DataFrame(data, columns=['id', 'start',  'score'])
output = output.sort_values(by='start')

因为 id1、id4 和 id6 的起始值正负 3,所以我们保留得分最高的行 (id6)。保留 id3 的 id2 和 id3 具有相同的原则。id5 是唯一的,应该保留。

标签: pythonpandasalgorithmdataframefilter

解决方案


你想要这个吗?-

bin = range(df['start'].min(), df['start'].max()+3, 3)
cut = pd.cut(df['start'], bins=bin, include_lowest= True)
def test(x):
    return x.sort_values('score').tail(1)
df = df.groupby(cut).apply(test).reset_index(drop=True)

推荐阅读