Pandas的pivot_table:添加%并运行%作为aggfunc

时间:2015-11-24 14:42:57

标签: python python-2.7 numpy pandas

我正在尝试创建一个数据透视表,该数据表在聚合的相同值上有3个度量值:

  1. np.sum
  2. 总数
  3. 运行总计百分比(所有%值的总和,直至并包括该行)
  4. 这很容易分两个阶段 - 标准的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))])
    

    这有点好(产生总和和%列)但是:

    • 没有正在运行%
    • 我无法提前定义列总数。
    • 列标题...如何控制%列获取的名称?

    非常感谢帮助实现上述目标,并且欢迎任何有关如何改进上述语法的建议。谢谢!

0 个答案:

没有答案