如何在熊猫中按组仅对另一列的前n%行进行分组?

时间:2019-07-17 15:28:44

标签: python pandas aggregate percentile

我有这样的df:

df = pd.DataFrame({'Date': ['01','01','01','01','01','02','02','02','02','02','02','03','03','03'], 'ID': ['a','b','c','d','e','a','b','e','f','g','h','b','e','g'], 'RESULT': [5,6,7,4,8,2,2,4,7,13,2,6,7,7], 'SALES': [100,150,120,130,200,140,150,100,120,110,180,170,120,100]})

enter image description here

我想按日期对结果的平均值分组,但仅针对销售额最高的ID。然后,预期结果应该是:

enter image description here

我原来的df大得多,大约有450万行,所以我需要高效的代码。

我找到了其他类似的答案,但是都没有解决我的问题。

非常感谢您。

2 个答案:

答案 0 :(得分:2)

尝试一下:不确定它是否足够快,但是应该足够

df.groupby('date').apply(lambda x : x[(x['SALES'] >= x['SALES'].quantile(0.8))]['RESULT'].mean())

答案 1 :(得分:1)

rank()的另一种方式:

df[df.groupby('Date')['SALES'].rank(pct=True).gt(0.8)].groupby('Date')['RESULT'].mean()

Date
01    8
02    2
03    6