考虑以下数据:
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
然而,在我看来,考虑到多列以及每列有多个甚至不同的聚合函数,这种方法的可伸缩性不是很强。正如雷蒙德·海廷格所说:“一定有更好的办法!”那么,哪一个更好?
提前谢谢
您可以使用^{} 和^{} 执行此操作:
多列和不同功能的解决方案:
相关问题 更多 >
编程相关推荐