我正在尝试创建一个数据透视表,该数据表在聚合的相同值上有3个度量值:
这很容易分两个阶段 - 标准的pivot_table与np.sum,然后再向pt添加两列。我感兴趣的是通过传递正确的aggfunc来知道你是否可以在创建数据透视表期间执行此操作。
这就是我所做的(我将使用seaborn自带的样本数据集):
import pandas as pd
import numpy as np
import seaborn as sns
tips = sns.load_dataset('tips')
# Two stage approach:
# 1 - Pivot:
pt = pd.pivot_table(tips, index = ['day'], values = ['tip'], aggfunc=np.sum)
# 2 - add new columns
tot_tips = pt['tip'].sum()
pt['% of tot tips'] = pt['tip']/tot_tips # percent of total
pt['Agg % of tot tips'] = pt['% of tot tips'].cumsum() # running %
这样做很好,但我想知道是否有更短的方法,直接使用aggfunc。
这是我最接近的地方:
tot_tips = pt['tip'].sum() # need to define this one
pt2 = pd.pivot_table(tips, index = ['day'], values = ['tip'],
aggfunc=[np.sum, (lambda x: sum(x/tot_tips))])
这有点好(产生总和和%列)但是:
非常感谢帮助实现上述目标,并且欢迎任何有关如何改进上述语法的建议。谢谢!