Python案例如何用Pandas做数据分组重采参数

wen python案例 1

本文目录导读:

Python案例如何用Pandas做数据分组重采参数

  1. 基础时间序列重采样
  2. 按类别分组后重采样
  3. 不同频率重采样示例
  4. 实际业务案例 - 销售数据分析
  5. 多维度分组重采样
  6. 自定义聚合函数示例
  7. 条件筛选后重采样
  8. 重采样参数详解
  9. 实际应用 - 温度数据分析
  10. 关键知识点总结:

我将为您展示如何使用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)

关键知识点总结:

  1. 基本语法df.groupby('group').resample('freq').agg()
  2. 常用频率参数
    • 'D': 天
    • 'W': 周
    • 'M': 月
    • 'Q': 季度
    • 'Y': 年
    • 'H': 小时
  3. 常用聚合函数:sum, mean, max, min, std, count
  4. 数据要求:日期列必须是索引(DatetimeIndex)
  5. 分组优先级:先分组再重采样

这些案例涵盖了数据分组重采样的主要应用场景,您可以根据实际需求进行调整和使用。

抱歉,评论功能暂时关闭!