Python 3.x 如何将透视表中Dataframe中的布尔列聚合为百分比

Python 3.x 如何将透视表中Dataframe中的布尔列聚合为百分比,python-3.x,pandas,numpy,boolean,Python 3.x,Pandas,Numpy,Boolean,我有一个熊猫数据框。在它的许多列中有ID,它是布尔值,quarty表示年份和季度(例如2016Q1)以及State(例如TX、CA),因此它看起来像: id Quarter State True 15Q1 AZ False 17Q1 WY True 14Q2 NH False 15Q1 AZ 我正在尝试构建一个数据透视表,ID作为值,State作为索引,quarter作为列。我想使用np.mean作为agg_func但是我得到了DataError:没有要聚合的

我有一个熊猫数据框。在它的许多列中有ID,它是布尔值,quarty表示年份和季度(例如2016Q1)以及State(例如TX、CA),因此它看起来像:

id    Quarter State
True  15Q1    AZ
False 17Q1    WY
True  14Q2    NH
False 15Q1    AZ
我正在尝试构建一个数据透视表,ID作为值,State作为索引,quarter作为列。我想使用
np.mean
作为
agg_func
但是我得到了
DataError:没有要聚合的数值类型

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

我想我可以将
True
False
转换为1和0,但我不愿意,因为我实际上有很多“id”列,我希望通过这种方式进行聚合

编辑:所以这是一个只在我的完整数据集中出现的问题,而不是我用作示例的玩具数据集。我又玩了一些,如果我在'Year'或'State'上使用平均值作为聚合函数进行分组,则仍然会弹出
ValueError:No objects to concatenate
。当我尝试
df['id']时,它甚至会弹出。descripe()


以前有人遇到过这样的问题吗?

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

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_表中传递参数fill_values=0,以将NaNs替换为0

Hmmm,这是我尝试的,但它不起作用。我认为我的实际数据集有一些奇怪的东西,玩具数据集没有。我会更深入地研究,但我怀疑我能把一切都弄清楚。不过谢谢你的帮助。