如何在数据透视表中将Pandas Dataframe中的布尔列聚合为百分比

时间:2017-04-18 19:12:34

标签: python-3.x pandas numpy boolean

我有一个Pandas Dataframe。其中有很多列是ID,它是布尔,季度,它给出年份和季度(例如2016Q1)和州(例如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: No numeric types to aggregate

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

我想我可以将TrueFalse转换为1&0和0,但我更喜欢不要,因为我实际上有很多' id'列我希望以这种方式聚合。

编辑:所以这是一个只会弹出我的完整数据集的问题,而不是我用作例子的玩具数据集。我玩了一些,ValueError: No objects to concatenate仍然弹出,如果我使用mean作为聚合功能在'年'或者'州'。当我尝试df['id'].describe()

时,它甚至会弹出

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

1 个答案:

答案 0 :(得分: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,将NaN替换为0