【问题标题】:How to aggregate a boolean column in Pandas Dataframe in a Pivot Table as percentage如何在数据透视表中将 Pandas Dataframe 中的布尔列聚合为百分比
【发布时间】:2017-04-18 19:12:34
【问题描述】:

我有一个 Pandas 数据框。在它的众多列中,有 ID,它是布尔值,Quarter,它给出了年份和季度(例如 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,但我不希望这样做,因为我实际上有很多“id”列我想要聚合这边。

编辑:所以这个问题只会出现在我的完整数据集上,而不是我用作示例的玩具数据集上。我又玩了一些,如果我用平均值作为“年份”或“状态”上的聚合函数进行分组,ValueError: No objects to concatenate 仍然会弹出。当我尝试df['id'].describe()

时它甚至会弹出

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

【问题讨论】:

    标签: python-3.x pandas numpy boolean


    【解决方案1】:

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

    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

    【讨论】:

    • 嗯,这就是我尝试过的,但没有成功。我认为我的实际数据集有些奇怪,而玩具数据集没有。我会进一步深入研究它,但我怀疑我能把所有问题都解决掉。不过,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 2021-10-14
    • 2019-01-03
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多