python pandas 合并与透视
"""
表的合并 与 透视表
透视表 以某列分组 其它列作为数据统计结果
"""
import pandas as pd
# 准备数据
left = pd.DataFrame({
'student_id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'student_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung', 'Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'class_id': [1, 1, 1, 2, 2, 2, 3, 3, 3, 4],
'gender': ['M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F'],
'score': [46, 93, 21, 98, 79, 31, 26, 45, 99, 66],
'age': [23, 23, 24, 23, 24, 23, 24, 24, 25, 25]})
right = pd.DataFrame(
{'class_id': [1, 2, 3, 5],
'class_name': ['ClassA', 'ClassB', 'ClassC', 'ClassE']})
# 链接 合并两个DataFrame 链接方式可选
data = pd.merge(left, right)
print(data)
# 透视表 行以 class_id 和 gender分组
result = data.pivot_table(index=["class_id", "gender"])
print("--------------透视 分类[class_id] 次类[gender]\n", result)
# 透视表 行以 class_id 和 gender分组
result = data.pivot_table(index=["class_id", "gender"],
values=["score"])
print("--------------透视 分类[class_id] 次类[gender] 只显示分数\n", result)
# 透视表 行以 class_id、gender、age 三层分类
result = data.pivot_table(index=["class_id", "gender", "age"],
values=["score"])
print("--------------透视 [class_id][gender][age]\n", result)
# 透视表 行以[class_id][gender]分组 纵向以[age]分组
result = data.pivot_table(index=["class_id", "gender"],
columns=["age"],
values=["score"])
print("--------------透视 横向[class_id][gender] 纵向[age]\n", result)