gpt4 book ai didi

Python/Pandas 用于求解分组均值、中位数、众数和标准差

转载 作者:行者123 更新时间:2023-11-30 22:08:55 25 4
gpt4 key购买 nike

我有以下数据:

[4.1, 4.1, 4.1, 4.2, 4.3, 4.3, 4.4, 4.5, 4.6, 4.6, 4.8, 4.9, 5.1, 5.1, 5.2, 5.2, 5.3, 5.3, 5.3, 5.4, 5.4, 5.5, 5.6, 5.6, 5.6, 5.7, 5.8, 5.9, 6.2, 6.2, 6.2, 6.3, 6.4, 6.4, 6.5, 6.6, 6.7, 6.7, 6.8, 6.8]

我需要根据上面的数据构建其计数/频率表:

4.1 - 4.5: 8
4.6 - 5.0: 4
5.1 - 5.5: 10
5.6 - 6.0: 6
6.1 - 6.5: 7
6.6 - 7.0: 5

我能得到的最接近的结果是以下:

            counts  freqs
categories
[4.1, 4.6) 8 0.200
[4.6, 5.1) 4 0.100
[5.1, 5.6) 10 0.250
[5.6, 6.1) 6 0.150
[6.1, 6.6) 7 0.175
[6.6, 7.1) 5 0.125

通过这段代码:

sr = [4.1, 4.1, 4.1, 4.2, 4.3, 4.3, 4.4, 4.5, 4.6, 4.6, 4.8, 4.9, 5.1, 5.1, 5.2, 5.2, 5.3, 5.3, 5.3, 5.4, 5.4, 5.5, 5.6, 5.6, 5.6, 5.7, 5.8, 5.9, 6.2, 6.2, 6.2, 6.3, 6.4, 6.4, 6.5, 6.6, 6.7, 6.7, 6.8, 6.8]
ncut = pd.cut(sr, [4.1, 4.6, 5.1, 5.6, 6.1, 6.6, 7.1],right=False)

srpd = pd.DataFrame(ncut.describe())

我需要创建一个新列,它是“类别”值的中位数(例如,对于“[4.1, 4.6)”,它包含从 4.1 到 4.5 的数据的计数/频率(不包括 4.6)) ,所以我需要得到(4.1 + 4.5)/2,等于4.3。

这是我的问题:

1) 如何访问“categories”索引下的值以将其用于如上所述的计算?

2) 有没有办法以这种方式反射(reflect)范围:4.1 - 4.5、4.6 到 5.0 等?

3)是否有更简单的方法来计算此类分组数据的平均值、中位数、众数等?或者我必须在 Python 中为这些创建我自己的函数吗?

谢谢

最佳答案

对于您的垃圾箱和标签问题,以下情况如何:

bins = [4.1, 4.6, 5.1, 5.6, 6.1, 6.6, 7.1]
labels = ['{}-{}'.format(x, y-.1) for x, y in zip(bins[:], bins[1:])]

然后,不要将您的值作为列表,而是将它们设为系列

sr = pd.Series([4.1, 4.1, 4.1, 4.2, 4.3, 4.3, 4.4, 4.5, 4.6, 4.6, 4.8, 4.9, 5.1,
5.1, 5.2, 5.2, 5.3, 5.3, 5.3, 5.4, 5.4, 5.5, 5.6, 5.6, 5.6, 5.7,
5.8, 5.9, 6.2, 6.2, 6.2, 6.3, 6.4, 6.4, 6.5, 6.6, 6.7, 6.7, 6.8, 6.8])
ncut = pd.cut(sr, bins=bins, labels=labels, right=False)

定义一个lambda函数来计算频率

freq = lambda x: len(x) / x.sum()
freq.__name__ = 'freq'

最后,使用 concatgroupbyagg 获取每个 bin 的摘要统计信息

pd.concat([ncut, sr], axis=1).groupby(0).agg(['size', 'std', 'mean', freq])

关于Python/Pandas 用于求解分组均值、中位数、众数和标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52056369/

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