python - Pandas hub_table 多个 aggfunc 带边距

标签 python pandas pivot-table multi-index

我注意到,当有多个 aggfunc 例如(“count”、“mean”、“sum”)时,我无法设置 margins=True。

它会抛出KeyError: 'Level None not found'

这是示例代码。

df.pivot_table(values=A,index=[B,C,D],columns=E,aggfunc=("count","mean","sum"),
margins=True,margins_name="Total",fill_value=0)

更新:

这是示例 df:

[{'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 1, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 1, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 1, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'}]

代码抛出错误。

df.pivot_table(values="Results",index="Game_ID",
columns="Team",aggfunc=("count","mean","sum"),margins=True)

最佳答案

我看到你所说的错误。我通过使用函数调用而不是字符串名称“count”、“mean”和“sum”来解决这个问题。

首先,我们从您的数据框开始:

import pandas as pd

df=pd.DataFrame([{'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 1, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'},
 {'Game_ID': 'no.1', 'Results': 1, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 1, 'Team': 'A'},
 {'Game_ID': 'no.1', 'Results': 0, 'Team': 'B'}])

然后只需将聚合函数替换为对 len 的标准库调用和 numpy 聚合函数即可。

  • “count”变为 len
  • “mean”变为 np.mean
  • “sum”变为 np.sum

数据透视表由以下几行组成:

import numpy as np
df.pivot_table(values="Results",
               index="Game_ID",
               columns="Team",
               aggfunc=[len,np.mean,np.sum],
               margins=True)

Output pivot table

请注意,len 可能不是您想要的,但在本示例中,它给出的答案与“count”本身给出的答案相同。例如,看看 numpy.count_nonzero

关于python - Pandas hub_table 多个 aggfunc 带边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45895816/

相关文章:

mysql - 如何在 MySQL 中返回数据透视表输出?

python - 使用 curl 时让python发送回车键

javascript - 在 Python/Django 的 ckeditor 中启用图像上传按钮

python - pandas 与索引的元素相乘

python - 如何根据 Pandas 数据框中的两个或多个子集标准删除重复项

excel - 无法将 Excel 数据透视表行标签排序为数字

python - 创建 KeyStone 实例时 OpenStack KeyStone SSL 异常

python - Checkio Python 列表拼图。索引超出范围错误

python - 如何结合两个直方图python

python - Python Pandas 中的 Stack/Unstack 多索引数据透视表