一、背景
业务需求,需要对数据聚合之后,按照分组对组内的结果按照自己定义的计算方法聚合
二、代码实现

参考代码如下:
# 读取源文件
df1 = pd.read_excel('./test_3.xlsx')
df1.head()
# 自定义聚合函数
def get_total_marks(list1: list):
"""
自定义聚合函数:计算规则如下
计算列表的结果: = 最大 + 1/2 * 第二大 + 1/4 * 第三大 + ... + (1/2**(n-1) * 第n大
"""
res = 0
list1.sort(reverse=True)
for index, i in enumerate(list1):
res += i * 2**(-index)
return res
# 使用dataframe聚合
df2 = df1.sort_values(["site", "code", "stock_price"],ascending=[True, True, False])
df3 = df2.drop_duplicates(["code", "site"])
df4 = df3.groupby(["code"]).apply(lambda x: get_total_marks([i for i in x["stock_price"]]))
df5 = df4.reset_index()
df5.columns = ["code", "total_mark"]
df5
groupby之后可以使用apply()方法,此方法支持传入一个函数,普通的sum(), max(), mean()不能满足我们需求的时候,可以考虑自定义函数来完成聚合。
Python中DataFrame分组自定义聚合方法
博客围绕业务需求展开,当需要对数据聚合后按分组进行自定义计算方法的聚合时,介绍了在Python的DataFrame里,使用groupby后可通过apply()方法传入自定义函数来完成聚合,解决普通聚合函数无法满足的需求。
1万+

被折叠的 条评论
为什么被折叠?



