本文目录导读:

我将为您展示如何使用Pandas进行数据分组重采样,这里提供几个实际案例:
基础时间序列重采样
import pandas as pd
import numpy as np
from datetime import datetime
# 创建示例数据
dates = pd.date_range('2024-01-01', periods=1000, freq='H')
df = pd.DataFrame({
'date': dates,
'category': np.random.choice(['A', 'B', 'C'], 1000),
'value': np.random.randn(1000) * 100
})
print("原始数据前5行:")
print(df.head())
print("\n原始数据形状:", df.shape)
按类别分组后重采样
# 设置日期为索引
df = df.set_index('date')
# 按category分组后,按天重采样求平均值
result_daily = df.groupby('category').resample('D')['value'].agg(['mean', 'std', 'count'])
print("\n按天重采样结果:")
print(result_daily.head(10))
不同频率重采样示例
# 按周重采样
weekly_result = df.groupby('category').resample('W')['value'].agg(['mean', 'sum', 'count'])
print("\n按周重采样结果:")
print(weekly_result.head(10))
# 按月重采样
monthly_result = df.groupby('category').resample('M')['value'].agg(['mean', 'min', 'max'])
print("\n按月重采样结果:")
print(monthly_result.head(10))
实际业务案例 - 销售数据分析
# 创建销售数据示例
import random
dates = pd.date_range('2024-01-01', periods=365, freq='D')
sales_data = pd.DataFrame({
'date': np.random.choice(dates, 2000),
'product': np.random.choice(['手机', '电脑', '平板', '耳机'], 2000),
'region': np.random.choice(['华东', '华南', '华北', '西南'], 2000),
'sales': np.random.randint(100, 10000, 2000),
'quantity': np.random.randint(1, 50, 2000)
})
print("\n销售数据前5行:")
print(sales_data.head())
# 设置日期索引
sales_data = sales_data.set_index('date')
# 1. 按产品和地区分组,按月统计销售额和数量
monthly_sales = sales_data.groupby(['product', 'region']).resample('M').agg({
'sales': ['sum', 'mean'],
'quantity': ['sum', 'mean']
})
print("\n按月统计各产品各地区销售情况:")
print(monthly_sales.head(20))
多维度分组重采样
# 按产品分组,按周重采样,使用不同聚合函数
weekly_stats = sales_data.groupby('product').resample('W').agg({
'sales': ['sum', 'mean', 'std'],
'quantity': ['sum', 'median']
})
print("\n按周统计各产品销售情况:")
print(weekly_stats.head(20))
# 按地区分组,按季度重采样
quarterly_stats = sales_data.groupby('region').resample('Q').agg({
'sales': ['sum', 'mean', 'max'],
'quantity': ['sum', 'mean']
})
print("\n按季度统计各地区销售情况:")
print(quarterly_stats.head(20))
自定义聚合函数示例
# 自定义聚合函数
def sales_growth_rate(group):
"""计算销售增长率"""
if len(group) > 1:
first_val = group.iloc[0]
last_val = group.iloc[-1]
return (last_val - first_val) / first_val * 100
return 0
# 按月计算各产品增长率
monthly_growth = sales_data.groupby('product').resample('M')['sales'].agg([
('total_sales', 'sum'),
('avg_daily_sales', 'mean'),
('max_sales', 'max'),
('min_sales', 'min'),
('growth_rate', sales_growth_rate)
])
print("\n各产品月度销售增长率:")
print(monthly_growth.head(10))
条件筛选后重采样
# 筛选特定产品后进行重采样
phone_data = sales_data[sales_data['product'] == '手机']
phone_weekly = phone_data.groupby('region').resample('W')['sales'].sum().unstack()
print("\n手机在各地区周销售额:")
print(phone_weekly.head())
重采样参数详解
# 准备示例数据
index = pd.date_range('2024-01-01', periods=50, freq='H')
data = pd.DataFrame({
'group': ['A']*20 + ['B']*20 + ['C']*10,
'value': np.random.randn(50) * 10
}, index=index)
print("\n重采样参数示例:")
print("-" * 50)
# 不同的重采样频率
frequencies = ['H', 'D', 'W', 'M', 'Q', 'Y']
for freq in frequencies:
result = data.groupby('group').resample(freq)['value'].agg(['count', 'mean'])
print(f"\n频率: {freq}")
print(result.head())
# 不同的聚合方法
methods = ['sum', 'mean', 'max', 'min', 'std', 'var', 'median']
for method in methods:
result = data.groupby('group').resample('D')['value'].agg(method)
print(f"\n聚合方法: {method}")
print(result.head())
实际应用 - 温度数据分析
# 创建温度数据示例
dates = pd.date_range('2024-01-01', periods=1000, freq='H')
temp_data = pd.DataFrame({
'date': dates,
'city': np.random.choice(['北京', '上海', '广州', '深圳'], 1000),
'temperature': np.random.uniform(15, 35, 1000),
'humidity': np.random.uniform(40, 80, 1000)
})
temp_data = temp_data.set_index('date')
print("\n温度数据前5行:")
print(temp_data.head())
# 按城市分组,按天计算日均温和湿度
daily_weather = temp_data.groupby('city').resample('D').agg({
'temperature': ['mean', 'max', 'min'],
'humidity': ['mean', 'max', 'min']
})
print("\n各城市每日天气统计:")
print(daily_weather.head(15))
# 按月统计各城市平均温度趋势
monthly_trend = temp_data.groupby('city').resample('M')['temperature'].agg(['mean', 'std'])
print("\n各城市月均温度:")
print(monthly_trend)
关键知识点总结:
- 基本语法:
df.groupby('group').resample('freq').agg() - 常用频率参数:
- 'D': 天
- 'W': 周
- 'M': 月
- 'Q': 季度
- 'Y': 年
- 'H': 小时
- 常用聚合函数:sum, mean, max, min, std, count
- 数据要求:日期列必须是索引(DatetimeIndex)
- 分组优先级:先分组再重采样
这些案例涵盖了数据分组重采样的主要应用场景,您可以根据实际需求进行调整和使用。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播