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

如何在Pandas中按区域和时间分组批量插入数值?

停车场时段费率批量插入解决方案

核心思路

无需依赖分组操作,先从时间字段提取小时信息,再通过预设的「区域-时段」费率规则批量赋值,比分组更直接高效。

步骤1:提取时间小时数

先确保OccupancyDateTime是datetime类型,再从中提取小时用于判断时段:

# 转换为datetime类型(若未处理过)
df_parking['OccupancyDateTime'] = pd.to_datetime(df_parking['OccupancyDateTime'])
# 新增小时列
df_parking['hour'] = df_parking['OccupancyDateTime'].dt.hour

步骤2:定义费率规则并批量赋值

根据需求选择合适的实现方式:

方式一:条件列表赋值(适合规则较少的场景)

import numpy as np

# 定义匹配条件与对应费率
conditions = [
    # FirstHill 早8:00-11:00(包含8点,不包含11点,对应hour=8,9,10)
    (df_parking['PaidParkingArea'] == 'FirstHill') & (df_parking['hour'].between(8, 10)),
    # 可继续添加其他区域规则,比如Downtown午间时段
    (df_parking['PaidParkingArea'] == 'Downtown') & (df_parking['hour'].between(11, 17)),
    # 默认无费率场景
    True
]

rates = [0.5, 1.0, 0.0]

# 批量生成费率列
df_parking['ParkingRate'] = np.select(conditions, rates)

方式二:字典映射赋值(适合多区域、多时段的复杂规则)

先定义区域费率映射,再通过自定义函数匹配:

# 定义区域-时段费率字典,键为区域名,值为(时段起始, 时段结束):费率
area_rate_mapping = {
    'FirstHill': {
        (8, 11): 0.5,
        (11, 18): 0.8,
        (18, 24): 0.3,
        (0, 8): 0.0
    },
    'CapitolHill': {
        (7, 12): 0.6,
        (12, 19): 0.9,
        (19, 24): 0.4,
        (0, 7): 0.0
    }
}

# 自定义匹配函数
def match_parking_rate(row):
    area = row['PaidParkingArea']
    hour = row['hour']
    # 遍历当前区域的时段规则
    for (start_hour, end_hour), rate in area_rate_mapping.get(area, {}).items():
        if start_hour <= hour < end_hour:
            return rate
    return 0.0  # 无匹配规则时返回默认费率

# 批量生成费率列
df_parking['ParkingRate'] = df_parking.apply(match_parking_rate, axis=1)

补充说明

你之前使用的df_parking.groupby(['PaidParkingArea','OccupancyDateTime'])主要用于分组统计(比如各时段停车数量),而批量赋值费率更适合直接通过行级的「区域+时段」匹配实现,无需分组操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:00:19