You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas按多条件分组数据?含季节与工作日/周末分组需求

按季节+工作日/周末分组处理时间序列数据

作为新手,别担心,我们用Python的pandas库就能轻松完成这个需求,步骤非常清晰,我会一步步给你讲解:

步骤1:准备工作和导入数据

首先确保你已经安装了pandas,如果没安装的话,先在终端运行:

pip install pandas

然后加载你的数据,假设你的数据是CSV格式(如果是Excel文件,用pd.read_excel()替换即可):

import pandas as pd

# 这里用你提供的样本数据做示例,实际使用时替换成你的文件路径
data = pd.DataFrame({
    'timestamp': ['2017-01-01 00:00', '2017-01-01 01:00', '2017-01-01 02:00', '2017-01-01 03:00', '2017-01-01 04:00'],
    'date': ['01/01/2017', '01/01/2017', '01/01/2017', '01/01/2017', '01/01/2017'],
    'month': ['Jan', 'Jan', 'Jan', 'Jan', 'Jan'],
    'day': ['Sun', 'Sun', 'Sun', 'Sun', 'Sun'],
    'hour': ['00:00', '01:00', '02:00', '03:00', '04:00'],
    'price': [60.23, 60.73, 75.99, 60.76, 49.01]
})

# 把timestamp列转换成datetime类型,这是处理时间数据的核心前提
data['timestamp'] = pd.to_datetime(data['timestamp'])

步骤2:定义季节规则

根据你的需求,Winter包含11、12、1、2月,我们用一个映射字典来给每个日期分配对应的季节:

# 月份数字到季节名称的映射
season_map = {
    11: 'Winter',
    12: 'Winter',
    1: 'Winter',
    2: 'Winter',
    3: 'Spring',
    4: 'Spring',
    5: 'Spring',
    6: 'Summer',
    7: 'Summer',
    8: 'Summer',
    9: 'Autumn',
    10: 'Autumn'
}

# 从timestamp中提取月份数字,再映射到季节
data['season'] = data['timestamp'].dt.month.map(season_map)

步骤3:区分工作日和周末

pandas的dt.dayofweek会返回0(周一)到6(周日)的数字,我们用这个来判断是否是周末:

# 判断是否为周末:5代表周六,6代表周日
data['is_weekend'] = data['timestamp'].dt.dayofweek.isin([5, 6])

# 转换成你需要的文本标签:Weekend/Weekday
data['day_type'] = data['is_weekend'].map({True: 'Weekend', False: 'Weekday'})

步骤4:组合分组标签

把季节和工作日/周末组合成你要的格式,比如"Weekend_Winter":

data['group_label'] = data['day_type'] + '_' + data['season']

现在你的数据里已经有了group_label列,每一行都对应了所属的分组。

步骤5:按分组进行聚合分析

接下来你可以按这个分组标签做各种统计,比如计算每个分组的平均价格、总价格等:

# 计算每个分组的平均价格
grouped_avg_price = data.groupby('group_label')['price'].mean()
print("各分组平均价格:")
print(grouped_avg_price)

# 如果需要查看某个分组的原始数据,比如Weekend_Winter
winter_weekend_data = data.groupby('group_label').get_group('Weekend_Winter')
print("\n冬季周末的原始数据:")
print(winter_weekend_data)

完整代码汇总

把上面的步骤整合起来,就是可以直接运行的完整代码:

import pandas as pd

# 加载数据(实际使用时替换为你的数据文件路径)
data = pd.DataFrame({
    'timestamp': ['2017-01-01 00:00', '2017-01-01 01:00', '2017-01-01 02:00', '2017-01-01 03:00', '2017-01-01 04:00'],
    'date': ['01/01/2017', '01/01/2017', '01/01/2017', '01/01/2017', '01/01/2017'],
    'month': ['Jan', 'Jan', 'Jan', 'Jan', 'Jan'],
    'day': ['Sun', 'Sun', 'Sun', 'Sun', 'Sun'],
    'hour': ['00:00', '01:00', '02:00', '03:00', '04:00'],
    'price': [60.23, 60.73, 75.99, 60.76, 49.01]
})

# 转换时间列格式
data['timestamp'] = pd.to_datetime(data['timestamp'])

# 分配季节标签
season_map = {11:'Winter',12:'Winter',1:'Winter',2:'Winter',3:'Spring',4:'Spring',5:'Spring',6:'Summer',7:'Summer',8:'Summer',9:'Autumn',10:'Autumn'}
data['season'] = data['timestamp'].dt.month.map(season_map)

# 区分工作日/周末
data['day_type'] = data['timestamp'].dt.dayofweek.isin([5,6]).map({True:'Weekend',False:'Weekday'})

# 生成最终分组标签
data['group_label'] = data['day_type'] + '_' + data['season']

# 分组统计示例
grouped_avg = data.groupby('group_label')['price'].mean()
print("各分组平均价格:")
print(grouped_avg)

这样运行后,你就能得到完全符合需求的分组结果啦!如果你的数据是从CSV文件读取的,只需要把pd.DataFrame(...)换成pd.read_csv('你的文件路径.csv')即可。

内容的提问来源于stack exchange,提问作者tp_1290

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:14:33