本文目录导读:

我来给你展示几个使用Pandas进行数据区间统计的常用方法。
基本区间统计 - cut() 函数
import pandas as pd
import numpy as np
# 创建示例数据
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],
'年龄': [22, 35, 28, 45, 18, 52, 33, 41],
'分数': [85, 92, 78, 65, 95, 88, 72, 90]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
# 方法1:指定区间边界
bins = [0, 20, 30, 40, 50, 60]
age_groups = pd.cut(df['年龄'], bins=bins, labels=['青少年', '青年', '壮年', '中年', '老年'])
df['年龄分组'] = age_groups
print("\n年龄分组结果:")
print(df)
# 统计各年龄段人数
print("\n各年龄段人数统计:")
print(df['年龄分组'].value_counts().sort_index())
等宽区间统计
# 方法2:自动等宽划分(分成4组)
score_groups = pd.cut(df['分数'], bins=4, labels=['差', '中', '良', '优'])
df['分数等级'] = score_groups
print("等宽划分结果:")
print(df)
# 查看具体的分割点
print("\n分数分割点:")
print(pd.cut(df['分数'], bins=4).value_counts())
等频区间统计(分位数)
# 方法3:等频划分(按分位数)
score_groups_qcut = pd.qcut(df['分数'], q=4, labels=['Q1', 'Q2', 'Q3', 'Q4'])
df['分数四分位'] = score_groups_qcut
print("等频划分结果:")
print(df)
# 查看每个区间的数据量
print("\n各分位数区间数据量:")
print(df['分数四分位'].value_counts().sort_index())
实际应用案例:销售数据分析
# 创建销售数据
np.random.seed(42)
sales_data = {
'日期': pd.date_range('2023-01-01', periods=100, freq='D'),
'销售额': np.random.randint(1000, 10000, 100),
'客户数量': np.random.randint(10, 100, 100)
}
sales_df = pd.DataFrame(sales_data)
# 定义销售额区间
sales_bins = [0, 2000, 4000, 6000, 8000, 10000]
sales_labels = ['低(<2000)', '中低(2000-4000)', '中等(4000-6000)',
'中高(6000-8000)', '高(8000-10000)']
sales_df['销售额区间'] = pd.cut(sales_df['销售额'],
bins=sales_bins,
labels=sales_labels)
print("销售数据前10行:")
print(sales_df.head(10))
# 统计各区间数据
print("\n各销售额区间统计:")
print(sales_df['销售额区间'].value_counts().sort_index())
# 添加更多统计信息
stats = sales_df.groupby('销售额区间').agg({
'销售额': ['count', 'mean', 'sum'],
'客户数量': 'mean'
}).round(2)
print("\n各区间详细统计:")
print(stats)
多维度区间统计
# 创建更复杂的示例数据
complex_data = {
'部门': ['销售']*20 + ['技术']*20 + ['市场']*20,
'绩效': np.random.randint(60, 100, 60),
'年龄': np.random.randint(25, 50, 60)
}
complex_df = pd.DataFrame(complex_data)
# 同时按部门和对绩效进行区间统计
perf_bins = [60, 70, 80, 90, 100]
perf_labels = ['不及格', '及格', '良好', '优秀']
complex_df['绩效等级'] = pd.cut(complex_df['绩效'],
bins=perf_bins,
labels=perf_labels)
# 部门与绩效等级的交叉统计
cross_tab = pd.crosstab(complex_df['部门'],
complex_df['绩效等级'],
margins=True,
margins_name='合计')
print("部门与绩效等级交叉统计:")
print(cross_tab)
# 多个维度分组统计
multi_stats = complex_df.groupby(['部门', '绩效等级']).agg({
'绩效': ['count', 'mean'],
'年龄': 'mean'
}).round(2)
print("\n多维分组统计:")
print(multi_stats)
动态区间划分
def dynamic_binning(data, num_bins=5):
"""动态创建等宽区间"""
min_val, max_val = data.min(), data.max()
bin_width = (max_val - min_val) / num_bins
# 创建区间边界
bins = [min_val + i * bin_width for i in range(num_bins + 1)]
labels = [f'等级{i+1}' for i in range(num_bins)]
return pd.cut(data, bins=bins, labels=labels, include_lowest=True)
# 应用动态区间
df['动态年龄分组'] = dynamic_binning(df['年龄'], num_bins=4)
print("动态区间划分结果:")
print(df[['姓名', '年龄', '动态年龄分组']])
高级统计:区间与聚合
# 创建月份和销售额数据
date_data = {
'月份': ['2023-01', '2023-02', '2023-03'] * 10,
'销售额': np.random.randint(5000, 30000, 30),
'成本': np.random.randint(3000, 20000, 30)
}
monthly_df = pd.DataFrame(date_data)
# 对销售额进行区间划分
monthly_df['销售区间'] = pd.cut(monthly_df['销售额'],
bins=[0, 10000, 20000, 30000],
labels=['小规模', '中等规模', '大规模'])
# 按区间和月份进行汇总
summary = monthly_df.groupby(['月份', '销售区间']).agg({
'销售额': ['count', 'mean', 'sum'],
'成本': 'mean'
}).round(2)
print("月度销售区间汇总:")
print(summary)
pd.cut()- 按照指定的区间边界进行等宽分段pd.qcut()- 按照分位数进行等频分段value_counts()- 统计每个区间的数据量groupby()- 按区间分组后进行聚合计算crosstab()- 创建交叉统计表
这些方法可以灵活组合,满足各种数据区间统计需求,关键是选择合适的区间划分策略(等宽或等频)和合适的统计指标。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播