【问题标题】:Unexpected result in pandas pivot_table熊猫pivot_table中的意外结果
【发布时间】:2018-07-06 13:14:12
【问题描述】:

我正在尝试在 pandas Dataframe 上做一个 pivot_table。我几乎得到了预期的结果,但它似乎乘以 2。我可以除以 2 并收工,但是,我想知道我是否做错了什么。

代码如下:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={"IND":[1,2,3,4,5,1,5,5],"DATA":[2,3,4,2,10,4,3,3]})
df_pvt = pd.pivot_table(df, aggfunc=np.size, index=["IND"], columns="DATA")

df_pvt 现在是:

DATA   2    3    4    10
IND                     
1     2.0  NaN  2.0  NaN
2     NaN  2.0  NaN  NaN
3     NaN  NaN  2.0  NaN
4     2.0  NaN  NaN  NaN
5     NaN  4.0  NaN  2.0

但是,应该是 1.0 而不是 2.0!我误会/做错了什么?

【问题讨论】:

    标签: python pandas numpy dataframe pivot-table


    【解决方案1】:

    改用字符串'size'。这将触发 Pandas 对“大小”的解释,即组中元素的数量。 NumPy 对大小的解释是每个维度长度的乘积。

    df = pd.pivot_table(df, aggfunc='size', index=["IND"], columns="DATA")
    
    print(df)
    
    DATA   2    3    4    10
    IND                     
    1     1.0  NaN  1.0  NaN
    2     NaN  1.0  NaN  NaN
    3     NaN  NaN  1.0  NaN
    4     1.0  NaN  NaN  NaN
    5     NaN  2.0  NaN  1.0
    

    【讨论】:

    • 谢谢。这给出了预期的结果。你知道为什么 np.size 给出错误的结果吗?根据文档,它还应该给我元素的数量......
    • Pandas 和 NumPy 以不同的方式定义元素的数量。对于 Pandas,它是组中的行数。对于 NumPy,它似乎考虑了您在原始数据框中有 2 列的事实。一般来说,您应该尽可能信任 Pandas 基于字符串的方法。
    • 好消息。我几乎没有检查就使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多