数据透视表(Pivot Table)是一种数据汇总工具,它能将数据按照一个或多个键进行分组聚合,并根据行列标签重新排列数据。在Pandas中,pivot_table()
函数是实现这一功能的主要方法。
pd.pivot_table(data, values=None, index=None, columns=None,
aggfunc='mean', fill_value=None, margins=False,
dropna=True, margins_name='All')
处理多个数据帧时,通常需要先合并数据,然后再创建透视表。
import pandas as pd
# 创建示例数据帧
df1 = pd.DataFrame({
'Date': ['2023-01-01', '2023-01-02', '2023-01-03'],
'Product': ['A', 'B', 'A'],
'Sales': [100, 150, 200]
})
df2 = pd.DataFrame({
'Date': ['2023-01-01', '2023-01-02', '2023-01-04'],
'Product': ['B', 'A', 'C'],
'Sales': [120, 180, 90]
})
# 合并数据帧
combined_df = pd.concat([df1, df2])
# 创建透视表
pivot = pd.pivot_table(combined_df,
values='Sales',
index='Product',
columns='Date',
aggfunc='sum',
fill_value=0)
print(pivot)
# 分别创建透视表
pivot1 = pd.pivot_table(df1,
values='Sales',
index='Product',
columns='Date',
aggfunc='sum',
fill_value=0)
pivot2 = pd.pivot_table(df2,
values='Sales',
index='Product',
columns='Date',
aggfunc='sum',
fill_value=0)
# 合并透视表
combined_pivot = pivot1.add(pivot2, fill_value=0).fillna(0)
print(combined_pivot)
# 添加地区信息
df1['Region'] = ['North', 'South', 'North']
df2['Region'] = ['South', 'North', 'East']
combined_df = pd.concat([df1, df2])
# 多级索引透视表
multi_pivot = pd.pivot_table(combined_df,
values='Sales',
index=['Region', 'Product'],
columns='Date',
aggfunc='sum',
fill_value=0)
print(multi_pivot)
# 使用多个聚合函数
multi_agg = pd.pivot_table(combined_df,
values='Sales',
index='Product',
columns='Date',
aggfunc=['sum', 'mean', 'count'],
fill_value=0)
print(multi_agg)
# 添加总计
pivot_with_margins = pd.pivot_table(combined_df,
values='Sales',
index='Product',
columns='Date',
aggfunc='sum',
fill_value=0,
margins=True,
margins_name='Total')
print(pivot_with_margins)
原因: 合并大数据集可能导致内存不足
解决方案:
dtype
参数优化数据类型原因: 不同数据帧有相同索引或列名但含义不同
解决方案:
keys
参数区分来源combined_df = pd.concat([df1, df2], keys=['df1', 'df2'])
原因: 不同数据帧的维度不完全一致
解决方案:
fill_value
参数填充缺失值dropna
参数控制是否删除缺失值原因: 选择的聚合函数与数据类型不匹配
解决方案:
sum
, mean
等count
, first
等通过灵活运用Pandas的透视表功能,可以高效地从多个数据源中提取有价值的汇总信息,支持数据驱动的决策过程。