How to efficiently aggregate the same column using different aggregate functions?(如何使用不同的聚合函数高效聚合同一列?)
本文介绍了如何使用不同的聚合函数高效聚合同一列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
考虑以下数据:
df = pd.DataFrame({"id": [1, 1, 1, 2, 2], "value": [10, 50, 90, 25, 75]})
df
id value
0 1 10
1 1 50
2 1 90
3 2 25
4 2 75
如何通过id高效优雅地聚合列值考虑同一列上的多个聚合函数,例如:
value_min value_max value_mean value_sum value_max_diff
id
1 10 90 50 150 80
2 25 75 50 100 50
一种方法是创建多个透视表,每个聚合函数(内置或非内置)创建一个透视表,然后连接结果,例如:
def max_diff(x):
return np.max(x) - np.min(x)
funcs = [np.min, np.max, np.mean, np.sum, max_diff]
tmp = [pd.pivot_table(df, index=["id"], values=["value"],
aggfunc={"value": f}).rename(columns={"value": f"value_{f.__name__}"}) for f in funcs]
pivot = pd.concat(tmp, axis=1)
pivot
value_amin value_amax value_mean value_sum value_max_diff
id
1 10 90 50 150 80
2 25 75 50 100 50
但是,在我看来,考虑到多个列和每个列有多个甚至不同的聚合函数,这种方法的伸缩性不是很好。正如雷蒙德·赫廷格所说:肯定有更好的办法!那么,哪一个更好?
提前谢谢!
推荐答案
可以使用pandas.DataFrame.groupby
和DataFrameGroupBy.aggregate
:
df.groupby("id").agg(funcs)
# value
# amin amax mean sum max_diff
#id
#1 10 90 50 150 80
#2 25 75 50 100 50
多列不同功能解决方案:
df = pd.DataFrame({"id": [1, 1, 1, 2, 2], "value1": [10, 50, 90, 25, 75], "value2": [1, 5, 6, 3, 8]})
# id value1 value2
#0 1 10 1
#1 1 50 5
#2 1 90 6
#3 2 25 3
#4 2 75 8
funcs = {"value1": [np.min, np.max], "value2": [np.mean, np.sum, max_diff]}
df.groupby("id").agg(funcs)
# value1 value2
# amin amax mean sum max_diff
#id
#1 10 90 4.0 12 5
#2 25 75 5.5 11 5
这篇关于如何使用不同的聚合函数高效聚合同一列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何使用不同的聚合函数高效聚合同一列?
基础教程推荐
猜你喜欢
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01