2017-04-18 72 views
0

我有一个熊猫数据框。在其众多的列ID,这是布尔,区,这给年度和季度(如2016Q1)和国家(如德克萨斯州,加利福尼亚州),所以它看起来是这样的:如何在熊猫数据框中以百分比聚合熊猫数据框中的布尔列作为百分比

id Quarter State 
True 15Q1 AZ 
False 17Q1 WY 
True 14Q2 NH 
False 15Q1 AZ 

我想建立一个数据透视表,ID为ID,状态为索引,四分之一为列。我想使用np.mean作为agg_func,但我得到DataError: No numeric types to aggregate

当我使用count作为聚合函数时,它显示正确。当我总计np.mean(df['id'])时,我得到.64,这正是我正在寻找的输出类型,除了更多的聚合而不是粒度。那么为什么np.sum在那里工作,但不是当我用它作为数据透视表中的聚合函数时?我如何才能使其工作。

我想我可以将TrueFalse的转换为1和0,但我不想这样做,因为我实际上有很多'id'列,我期望以这种方式聚合。

编辑:所以这是一个问题,只弹出我的完整数据集,而不是我用作示例的玩具数据集。如果我在“年”或“状态”中使用平均值作为聚合函数,我还会再玩一些,并且ValueError: No objects to concatenate仍会弹出。它甚至在我尝试时弹出df['id'].describe()

有没有人遇到过这样的问题?

回答

0

你的输出不是很清楚,但是这是我认为你需要

pd.pivot_table(df, index='State', columns='Quarter', values = 'id', aggfunc='mean') 

你得到

Quarter 14Q2 15Q1 17Q1 
State   
AZ  NaN  0.5  NaN 
NH  1.0  NaN  NaN 
WY  NaN  NaN  0.0 

您可以通过在pivot_table参数fill_values = 0 0更换的NaN

+0

嗯,这就是我的尝试,它没有奏效。我认为我的实际数据集有些奇怪,玩具数据集没有。我会进一步深入研究,但我怀疑我可以把所有问题都弄清楚。不过,感谢您的帮助。 – yeangst