我注意到,当具有多个(例如“” 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聚集函数即可。


“计数”变为len
“平均值”变为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)


python -  Pandas pivot_talbe带有边缘的多个聚集-LMLPHP

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

09-12 11:50