本文目录导读:

我来介绍几种使用Pandas进行数据交叉统计的常用方法:
使用crosstab()函数(最常用)
基本用法
import pandas as pd
# 创建示例数据
df = pd.DataFrame({
'性别': ['男', '女', '男', '女', '男', '女'],
'学历': ['本科', '硕士', '本科', '博士', '硕士', '本科'],
'城市': ['北京', '上海', '广州', '北京', '上海', '广州'],
'年龄': [25, 28, 32, 30, 27, 29]
})
# 简单交叉表 - 统计性别与学历的交叉频数
cross_tab = pd.crosstab(df['性别'], df['学历'])
print("性别与学历交叉统计:")
print(cross_tab)
进阶用法
# 带边距(总计)
cross_tab_margin = pd.crosstab(df['性别'], df['学历'], margins=True, margins_name='合计')
print("\n带总计的交叉表:")
print(cross_tab_margin)
# 显示百分比
cross_tab_pct = pd.crosstab(df['性别'], df['学历'], normalize='index') # 按行百分比
print("\n按性别百分比:")
print(cross_tab_pct)
# 多维度交叉
cross_tab_multi = pd.crosstab([df['性别'], df['城市']], df['学历'])
print("\n多维度交叉统计:")
print(cross_tab_multi)
# 添加聚合值
cross_tab_agg = pd.crosstab(df['性别'], df['学历'],
values=df['年龄'], aggfunc='mean')
print("\n平均年龄交叉表:")
print(cross_tab_agg)
使用pivot_table()函数
# 创建透视表
pivot = df.pivot_table(
values='年龄', # 要聚合的值
index='性别', # 行索引
columns='学历', # 列索引
aggfunc='mean', # 聚合函数
margins=True # 显示总计
)
print("\n透视表统计:")
print(pivot)
# 多种聚合函数
pivot_multi = df.pivot_table(
values='年龄',
index='性别',
columns='学历',
aggfunc=['count', 'mean', 'std']
)
print("\n多种统计指标:")
print(pivot_multi)
实际业务案例
电商用户分析
# 模拟电商数据
sales_data = pd.DataFrame({
'用户ID': range(1, 101),
'性别': ['男', '女'] * 50,
'年龄段': ['18-25', '26-35', '36-45', '46-55'] * 25,
'消费等级': ['高', '中', '低'] * 33 + ['高'],
'购买次数': np.random.randint(1, 20, 100),
'消费金额': np.random.randint(100, 5000, 100)
})
# 分析不同性别的消费等级分布
gender_spend = pd.crosstab(sales_data['性别'], sales_data['消费等级'])
print("性别与消费等级交叉统计:")
print(gender_spend)
# 分析年龄段和消费等级的平均购买次数
age_spend = pd.crosstab(sales_data['年龄段'], sales_data['消费等级'],
values=sales_data['购买次数'], aggfunc='mean')
print("\n各年龄段各消费等级的平均购买次数:")
print(age_spend.round(1))
学生成绩分析
# 模拟学生数据
student_data = pd.DataFrame({
'班级': ['A班', 'B班', 'A班', 'B班', 'A班', 'B班'] * 10,
'科目': ['数学', '数学', '语文', '语文', '英语', '英语'] * 10,
'成绩': np.random.randint(60, 100, 60),
'性别': ['男', '女'] * 30
})
# 分析各班级各科目平均成绩
class_subject = pd.crosstab(student_data['班级'], student_data['科目'],
values=student_data['成绩'], aggfunc='mean')
print("各班级各科目平均成绩:")
print(class_subject.round(1))
# 多维度分析:班级+性别 vs 各科目成绩
multi_dim = student_data.pivot_table(
values='成绩',
index=['班级', '性别'],
columns='科目',
aggfunc=['mean', 'count']
)
print("\n班级+性别与各科目成绩:")
print(multi_dim.round(1))
数据可视化结合
import matplotlib.pyplot as plt
import seaborn as sns
# 创建交叉统计并可视化
cross_vis = pd.crosstab(df['城市'], df['性别'])
print("城市与性别交叉统计:")
print(cross_vis)
# 热力图展示
plt.figure(figsize=(10, 6))
sns.heatmap(cross_vis, annot=True, cmap='YlOrRd', fmt='d')'城市与性别交叉统计热力图')
plt.show()
实用技巧
# 1. 多级列索引的处理
multi_col = pd.crosstab(df['性别'], [df['学历'], df['城市']])
print("多级列索引:")
print(multi_col)
# 2. 自定义排序
cross_sorted = pd.crosstab(df['性别'], df['学历'])
cross_sorted = cross_sorted.reindex(['男', '女'], axis=0) # 自定义行顺序
# 3. 添加条件过滤
high_age = df[df['年龄'] > 28]
cross_filter = pd.crosstab(high_age['性别'], high_age['学历'])
print("年龄>28的性别与学历交叉:")
print(cross_filter)
# 4. 数据汇总
cross_summary = pd.crosstab(df['性别'], df['学历'],
values=df['年龄'],
aggfunc={'年龄': ['count', 'mean', 'sum']})
这些方法可以帮助你快速完成数据的交叉统计分析,根据具体需求选择合适的方法!
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播