我正在探索不同的 python 库,我想知道如何找到分组数据集的近似中值。这里有一个表格供参考。
年龄 | 频率 |
---|---|
1-10 | 123 |
10-20 | 350 |
20-30 | 200 |
30 -40 | 1700 |
40-50 | 360 |
50-60 | 60 |
是否有任何函数或者我需要对公式进行硬编码,然后循环遍历每个函数数据集的行和列?
提前致谢。
可以使用 pandas 计算分组数据的近似中位数,你可以使用
numpy.interp
函数进行插值。
import pandas as pd
import numpy as np
# 定义数据
data = {
'Age': ['1-10', '10-20', '20-30', '30-40', '40-50', '50-60'],
'Frequency': [123, 350, 200, 1700, 360, 60]
}
# 创建 DataFrame
df = pd.DataFrame(data)
# 计算累积频率
df['Cumulative Frequency'] = df['Frequency'].cumsum()
# 总频率
total_frequency = df['Frequency'].sum()
# 中位数类:累积频率超过总频率一半的类
median_class_index = df['Cumulative Frequency'].searchsorted(total_frequency / 2)
median_class_lower = int(df['Age'][median_class_index].split('-')[0])
median_class_upper = int(df['Age'][median_class_index].split('-')[1])
# 中位数的线性插值
median = median_class_lower + (total_frequency / 2 - df['Cumulative Frequency'][median_class_index - 1]) / df['Frequency'][median_class_index] * (median_class_upper - median_class_lower)
print(f"近似中位数为:{median}")
此代码首先计算累积频率并确定中位数所在的类(组)。然后,它在该类中使用线性插值来估计中位数,考虑到中位数类之前的累积频率和中位数类本身的频率。
说明:
- 创建 DataFrame:
- 我们首先从你的数据创建一个 pandas DataFrame。
- 计算累积频率:
- 我们添加了一个“累积频率”列,该列跟踪频率的运行总数。
- 查找中位数类:
- 我们计算总频率并找到累积频率首先超过总频率一半的类。
- 线性插值:
- 我们使用中位数类的下限、中位数类之前的累积频率、中位数类的频率以及中位数类的上限,在中位数类内进行线性插值以找到近似中位数。
此代码将为你提供分组数据的近似中位数。
标签:python,pandas From: 69487460