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

如何基于Pandas多值Location列与业务规则计算Priority字段?

Pandas处理多值Location列计算Priority字段

需求说明

现有高级地点集合:贝鲁特(Beirut)、赛达(Saida),需基于以下规则为Pandas数据框计算Priority字段:

  • 若Location包含完全匹配的高级地点,且BusScore为0.75 → Priority = 1
  • 若Location包含完全匹配的高级地点,且BusScore为0.5 → Priority = 2
  • 若Location无任何完全匹配的高级地点 → Priority = 3

注:地点名称需完全匹配,例如BeirutX不视为匹配;需处理Location中带标点、空白的情况(如示例中的Tripoli.)。

输入示例

Business  Location           BusScore
    X.    Beirut, Aley        0.75
    Y.    Saida, Sour          0.5
    Z.    Baalbeck,Tripoli    0.75
    D.    Tripoli.            0.75

期望输出

Business           Location  BusScore  Priority
    X.        Beirut, Aley      0.75         1
    Y.         Saida, Sour      0.50         2
    Z.  Baalbeck,Tripoli      0.75         3
    D.            Tripoli.      0.75         3

代码实现

import pandas as pd

# 定义高级地点集合(集合查询效率优于列表)
premium_locations = {'Beirut', 'Saida'}

# 构造示例数据
data = {
    'Business': ['X.', 'Y.', 'Z.', 'D.'],
    'Location': ['Beirut, Aley', 'Saida, Sour', 'Baalbeck,Tripoli', 'Tripoli.'],
    'BusScore': [0.75, 0.5, 0.75, 0.75]
}
df = pd.DataFrame(data)

# 编写优先级计算逻辑
def calculate_priority(row):
    # 拆分地点并清理格式:去空白、去末尾句号
    cleaned_locations = [loc.strip().rstrip('.') for loc in row['Location'].split(',')]
    # 检查是否存在匹配的高级地点
    has_match = any(loc in premium_locations for loc in cleaned_locations)
    
    if has_match:
        if row['BusScore'] == 0.75:
            return 1
        elif row['BusScore'] == 0.5:
            return 2
    return 3

# 生成Priority列
df['Priority'] = df.apply(calculate_priority, axis=1)

# 打印结果
print(df.to_string(index=False))

关键逻辑说明

  1. 高级地点用集合存储:集合的in操作时间复杂度为O(1),比列表的O(n)更高效,适合批量查询;
  2. 地点格式清理:拆分Location后,去除每个地点的前后空白和末尾的标点(如示例中的.),避免因格式问题导致匹配失败;
  3. 逐行应用逻辑:通过apply(axis=1)逐行处理数据,按规则判断并返回对应的优先级值;
  4. 规则优先级:先判断是否匹配高级地点,再根据BusScore值返回对应优先级,最后默认返回3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:25:18