我有这样的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]})
我想按日期对结果的平均值分组,但仅针对销售额最高的ID。然后,预期结果应该是:
我原来的df大得多,大约有450万行,所以我需要高效的代码。
我找到了其他类似的答案,但是都没有解决我的问题。
非常感谢您。
答案 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