Pandas 透视表 Aggfunc 列表

18

Pandas透视表聚合函数字典

我试图在透视表计算以下 3 个聚合函数:

  1. 计数
  2. 平均值
  3. 标准差

这是代码:

n_page = (pd.pivot_table(Main_DF, 
                         values='SPC_RAW_VALUE',  
                         index=['ALIAS', 'SPC_PRODUCT', 'LABLE', 'RAW_PARAMETER_NAME'], 
                         columns=['LOT_VIRTUAL_LINE'],
                         aggfunc={'N': 'count', 'Mean': np.mean, 'Sigma': np.std})
          .reset_index()
         )

我收到的错误是:KeyError: 'Mean'

我该如何计算这三个函数?

3个回答

26

正如@Happy001所写的批准答案,aggfunc不能接受dict是错误的。实际上,我们可以将dict传递给aggfunc

一个非常方便的特性是能够将dictionary传递给aggfunc,这样您就可以对所选值中的每个值执行不同的函数。 例如:

import pandas as pd
import numpy as np

df = pd.read_excel('sales-funnel.xlsx')  #loading xlsx file

table = pd.pivot_table(df, index=['Manager', 'Status'], columns=['Product'], values=['Quantity','Price'],
           aggfunc={'Quantity':len,'Price':[np.sum, np.mean]},fill_value=0)
table
在上面的代码中,我将dictionary传递给aggfunc,并对Quantity执行len操作以及对Price执行meansum操作。

以下是输出结果:

enter image description here

该示例摘自透视表解释


1
不错,@ganesh。但是我注意到一个值只能映射到一个aggfunc。如果你试图将同一个值与其他aggfunc进行映射,只有第一次映射会起作用。你有遇到过这种情况吗? - Sagar Dawda

8

pivot_tableaggfunc参数可以接受一个函数或者函数列表,但不接受dict

aggfunc: 函数, 默认为numpy.mean 或 函数列表 如果传递了函数列表,则结果数据透视表将具有分层列,其顶级是函数名称(从函数对象本身推断出)

因此,请尝试:

n_page = (pd.pivot_table(Main_DF, 
                         values='SPC_RAW_VALUE',  
                         index=['ALIAS', 'SPC_PRODUCT', 'LABLE', 'RAW_PARAMETER_NAME'], 
                         columns=['LOT_VIRTUAL_LINE'],
                         aggfunc=[len, np.mean, np.std])
          .reset_index()
         )

您可能希望在此之后重新命名层次结构列。

1
请问您如何将分层列重命名,例如将“len”更改为“n”? - Felix

4

尝试使用groupby

df = (Main_DF
      .groupby(['ALIAS', 'SPC_PRODUCT', 'LABLE', 'RAW_PARAMETER_NAME'], as_index=False)
      .LOT_VIRTUAL_LINE
      .agg({'N': 'count', 'Mean': np.mean, 'Sigma': np.std})
     )

as_index=False设置为False,可以让这些列保留在数据框中,无需在之后重置索引。


看起来我正在计算统计数据的 'SPC_RAW_VALUE' 值在你的代码中消失了。 - Felix
你能发布一些样本数据吗?Main_DF.head().to_dict('list') - Alexander
抱歉,无法进行翻译。这是IP限制。 - Felix
3
那就编造一些吧![询问] - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接