gpt4 book ai didi

python - 计数为 aggfunc 的数据透视表给出与 value_counts 不同的结果

转载 作者:太空狗 更新时间:2023-10-29 21:56:03 24 4
gpt4 key购买 nike

我正在处理一些数据并最终遇到这样的情况,我想剪下这样的系列:

df = pd.DataFrame({'A': 10000*[1], 'B': np.random.randint(0, 1001, 10000)})

df['level'] = pd.cut(df.B, bins = [0, 200, 400, 600, 800, 1000],
labels = ['i', 'ii', 'iii', 'iv', 'v'])

为了计算每个级别中值的数量,我在执行以下操作时发现了两个不同的答案:

df.level.value_counts(sort = False)

i 1934
ii 1994
iii 2055
iv 2056
v 1952
Name: level, dtype: int64

df.pivot_table(index = 'A', columns = 'level', values = 'B', aggfunc = 'count').loc[1]

level
i 1994
ii 2056
iii 1934
iv 1952
v 2055
Name: 1, dtype: int64

这两种方法不应该给出相同的结果吗?

最佳答案

是的,他们应该给出相同的结果。事实上,即使在旧版本的 Pandas 中也是如此:

In [22]: pd.__version__
Out[22]: '0.20.3'

In [23]: df = pd.DataFrame({'A': 10000*[1], 'B': np.random.randint(0, 1001, 10000)})
In [24]: df['level'] = pd.cut(df.B, bins = [0, 200, 400, 600, 800, 1000],
labels = ['i', 'ii', 'iii', 'iv', 'v'])

In [25]: df.level.value_counts(sort = False)
Out[25]:
i 1968
ii 1936
iii 1992
iv 2073
v 2022
Name: level, dtype: int64

In [26]: df.pivot_table(index = 'A', columns = 'level', values = 'B', aggfunc = 'count').loc[1]
Out[26]:
level
i 1968
ii 1936
iii 1992
iv 2073
v 2022
Name: 1, dtype: int64

使用 df.groupby() 也可以:

In [27]: df.groupby('level').size()
Out[27]:
level
i 1968
ii 1936
iii 1992
iv 2073
v 2022
dtype: int64

因此,您使用的版本可能存在一些错误。

关于python - 计数为 aggfunc 的数据透视表给出与 value_counts 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com