本文目录导读:

在Python中实现数据透视表,最常用的是pandas库的pivot_table函数,以下是完整的实现案例:
基础案例
import pandas as pd
import numpy as np
# 创建示例数据
data = {
'日期': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02', '2024-01-03'],
'产品': ['A', 'B', 'A', 'B', 'A'],
'地区': ['华北', '华东', '华北', '华东', '华北'],
'销售额': [100, 200, 150, 250, 300],
'数量': [10, 20, 15, 25, 30]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
创建数据透视表
# 基本数据透视表
pivot_table = pd.pivot_table(
df,
values='销售额', # 要聚合的值
index='日期', # 行索引
columns='产品', # 列索引
aggfunc='sum' # 聚合函数
)
print("\n基本数据透视表:")
print(pivot_table)
多维度数据透视表
# 多维度数据透视表
pivot_multi = pd.pivot_table(
df,
values=['销售额', '数量'],
index=['日期', '地区'],
columns='产品',
aggfunc='sum',
fill_value=0 # 填充缺失值为0
)
print("\n多维数据透视表:")
print(pivot_multi)
多种聚合函数
# 使用多种聚合函数
pivot_agg = pd.pivot_table(
df,
values='销售额',
index='产品',
columns='地区',
aggfunc=['sum', 'mean', 'count', 'max']
)
print("\n多种聚合函数:")
print(pivot_agg)
添加总计和小计
# 添加总计和小计
pivot_margins = pd.pivot_table(
df,
values='销售额',
index='产品',
columns='地区',
aggfunc='sum',
margins=True, # 显示总计
margins_name='总计' # 总计的名称
)
print("\n带总计的数据透视表:")
print(pivot_margins)
实际案例分析
# 创建更复杂的数据集
np.random.seed(42)
sales_data = pd.DataFrame({
'日期': pd.date_range('2024-01-01', periods=30, freq='D'),
'产品': np.random.choice(['A', 'B', 'C'], 30),
'地区': np.random.choice(['华北', '华东', '华南', '西南'], 30),
'销售额': np.random.randint(100, 1000, 30),
'利润': np.random.randint(10, 100, 30),
'销售员': np.random.choice(['张三', '李四', '王五'], 30)
})
print("\n销售数据样例:")
print(sales_data.head())
# 创建月度、产品、地区的销售额汇总
sales_pivot = pd.pivot_table(
sales_data,
values='销售额',
index='地区',
columns='产品',
aggfunc='sum',
margins=True,
fill_value=0
)
print("\n各地区各产品销售总额:")
print(sales_pivot)
# 按销售员和地区统计销售额和利润
sales_employee = pd.pivot_table(
sales_data,
values=['销售额', '利润'],
index='销售员',
columns='地区',
aggfunc={'销售额': 'sum', '利润': 'mean'},
fill_value=0
)
print("\n各销售员在不同地区的表现:")
print(sales_employee)
高级用法 - 自定义聚合函数
# 自定义聚合函数
def range_func(x):
"""计算范围(最大值-最小值)"""
return x.max() - x.min()
pivot_custom = pd.pivot_table(
sales_data,
values='销售额',
index='产品',
columns='地区',
aggfunc=[np.sum, np.mean, range_func]
)
print("\n自定义聚合函数:")
print(pivot_custom)
数据透视表的可视化
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据透视表并可视化
pivot_visual = pd.pivot_table(
sales_data,
values='销售额',
index='产品',
columns='地区',
aggfunc='sum',
fill_value=0
)
# 热力图展示
plt.figure(figsize=(10, 6))
sns.heatmap(pivot_visual, annot=True, fmt='.0f', cmap='YlOrRd')'各地区产品销售热力图')
plt.show()
# 柱状图展示
pivot_visual.plot(kind='bar', figsize=(12, 6))'各产品销售对比')
plt.xlabel('产品')
plt.ylabel('销售额')
plt.legend(title='地区')
plt.xticks(rotation=0)
plt.show()
完整的实用函数
def create_sales_pivot(dataframe, value_col='销售额',
index_cols=['地区'],
columns_cols=['产品'],
agg_func='sum'):
"""
创建销售数据透视表的通用函数
参数:
dataframe: 数据框
value_col: 值列名
index_cols: 行索引列列表
columns_cols: 列索引列列表
agg_func: 聚合函数
返回:数据透视表
"""
try:
pivot = pd.pivot_table(
data=dataframe,
values=value_col,
index=index_cols,
columns=columns_cols,
aggfunc=agg_func,
fill_value=0,
margins=True,
margins_name='合计'
)
return pivot
except Exception as e:
print(f"创建数据透视表时出错:{e}")
return None
# 使用示例
result = create_sales_pivot(sales_data)
print("\n通用函数创建的数据透视表:")
print(result)
pandas的pivot_table函数提供了强大的数据透视功能:
- index: 行索引
- columns: 列索引
- values: 要聚合的值
- aggfunc: 聚合函数(sum, mean, count, max, min等)
- fill_value: 填充缺失值
- margins: 是否显示总计
通过这些功能,你可以轻松实现类似于Excel数据透视表的分析功能。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播