今天给大家分享一个 Pandas 中比 pivot_table 更简单的数据透视方法 —— pd.crosstab()
,特别适合做快速频数统计和交叉分析!
🔥 为什么要用 crosstab?
很多同学做数据透视只知道用 pivot_table
,但其实对于简单的频数统计,crosstab
更加简洁高效:
import pandas as pd
import numpy as np
# 创建示例数据
data = {
'部门': ['销售', '技术', '销售', '人事', '技术', '销售', '人事', '技术'],
'性别': ['男', '男', '女', '女', '男', '女', '女', '男'],
'绩效': [85, 90, 88, 92, 87, 95, 90, 85]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
输出结果:
原始数据:
部门 性别 绩效
0 销售 男 85
1 技术 男 90
2 销售 女 88
3 人事 女 92
4 技术 男 87
5 销售 女 95
6 人事 女 90
7 技术 男 85
✨ crosstab 基础用法
# 统计各部门男女员工人数
result = pd.crosstab(df['部门'], df['性别'])
print("\n各部门性别分布:")
print(result)
输出结果:
各部门性别分布:
性别 女 男
部门
人事 2 0
技术 0 3
销售 2 1
💡 进阶技巧:添加汇总和百分比
# 添加行汇总和百分比
result = pd.crosstab(
df['部门'],
df['性别'],
margins=True, # 添加总计
margins_name="总计",
normalize='index' # 行百分比
)
print("\n各部门性别分布(带百分比):")
print(result)
输出结果:
各部门性别分布(带百分比):
性别 女 男 总计
部门
人事 1.000000 0.000000 1.0
技术 0.000000 1.000000 1.0
销售 0.666667 0.333333 1.0
总计 0.500000 0.500000 1.0
📊 可视化展示
import matplotlib.pyplot as plt
pd.crosstab(df['部门'], df['性别']).plot.bar()
plt.title('各部门性别分布')
plt.ylabel('人数')
plt.show()
🎯 使用场景总结
pd.crosstab()
特别适合:
-
快速统计分类变量交叉频数
-
制作百分比交叉表
-
小数据集的快速探索性分析
相比 pivot_table,它的语法更简洁,执行速度也更快!
💬 互动时间:你在工作中最常用哪种数据透视方法?pivot_table 还是 crosstab?或者有其他更好的方法?欢迎在评论区分享你的经验!
👍 如果觉得有用,请点赞+收藏,下次我会分享更多 Pandas 的隐藏技巧!