Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫';pivot_表:添加%并将%作为aggfunc运行_Python_Python 2.7_Numpy_Pandas - Fatal编程技术网

Python 熊猫';pivot_表:添加%并将%作为aggfunc运行

Python 熊猫';pivot_表:添加%并将%作为aggfunc运行,python,python-2.7,numpy,pandas,Python,Python 2.7,Numpy,Pandas,我正在尝试创建一个透视表,该透视表在聚合的相同值上有3个度量值: np.sum %总数 总计的运行百分比(该行之前及之后的所有%值之和) 要做到这一点,分两个阶段很容易——使用np.sum的标准pivot_表,然后在pt中再添加两列。我感兴趣的是知道您是否可以在创建透视表的过程中通过传递正确的aggfuncs来完成这项工作 以下是我所做的工作(我将使用seaborn附带的内置示例数据集): 这提供了很好的效果,但我想知道是否有一种更短的方法,直接使用aggfuncs 这是我得到的最接近的结果:

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

  • np.sum
  • %总数
  • 总计的运行百分比(该行之前及之后的所有%值之和)
  • 要做到这一点,分两个阶段很容易——使用np.sum的标准pivot_表,然后在pt中再添加两列。我感兴趣的是知道您是否可以在创建透视表的过程中通过传递正确的aggfuncs来完成这项工作

    以下是我所做的工作(我将使用seaborn附带的内置示例数据集):

    这提供了很好的效果,但我想知道是否有一种更短的方法,直接使用aggfuncs

    这是我得到的最接近的结果:

    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))])
    
    这稍微好一点(产生总和和%列),但是:

    • 无运行%
    • 我无法回避必须提前定义列的总数
    • 列标题。。。如何控制%列的名称

    如果您能帮助实现上述目标,我们将不胜感激,同时欢迎您提出任何关于如何改进上述语法的建议。谢谢

    就计算成本而言,第一种方法不是更好吗?在第一种情况下,数学运算应矢量化,在第二种情况下,应逐行运行。在投入时间使代码更加紧凑之前,我会先运行它们,然后再运行
    %timeit
    。公平的说,但是-对于小数据集,它可以忽略不计,我个人会发现一个aggfunc解决方案更优雅。另外,我需要一个替代的解决方案,这样我可以比较计算所需的时间:)只需比较计算总和所需的时间和百分比。在比较中不要包括累计百分比。Aggfunc也会使代码很难阅读,IMHO。谢谢,但即使只是为了小集合或学习价值,我还是很想知道是否可以用aggfuncs完成上述操作。谢谢你的见解!
    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))])