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

如何高效在Pandas DataFrame中识别跨RING的CIRCUIT关联CLLI

高效解决Pandas跨RING CIRCUIT的NeighbourCLLI生成问题

针对你的50万行数据集,绝对不要用逐行迭代,Pandas的分组和矢量化操作能把速度提升几个数量级。下面是直接可用的原生解决方案,核心思路是通过groupby批量处理每个CIRCUIT的关联数据:

实现步骤与代码

假设你的DataFrame名为df,包含RING、CLLI、RR、root、CIRCUIT列:

import pandas as pd

def process_circuit_group(group):
    # 为当前CIRCUIT构建「RING对应CLLI」的映射字典
    ring_to_clli = group.set_index('RING')['CLLI'].to_dict()
    # 如果当前CIRCUIT只对应一个RING,直接设为NaN
    if len(ring_to_clli) == 1:
        group['NeigbourCLLI'] = pd.NA
        return group
    # 对组内每一行,筛选出非当前RING的CLLI并合并为字符串
    group['NeigbourCLLI'] = group['RING'].apply(
        lambda current_ring: ','.join(
            [clli for ring, clli in ring_to_clli.items() if ring != current_ring]
        )
    )
    return group

# 按CIRCUIT分组处理,直接更新原DataFrame
df = df.groupby('CIRCUIT', group_keys=False).apply(process_circuit_group)

为什么这个方法高效?

  1. 批量分组处理:每个CIRCUIT只被处理一次,避免了逐行迭代时重复查询整个数据集的开销;
  2. 底层优化:groupby和apply的底层是Pandas优化过的C级实现,比Python层面的循环快得多;
  3. 逻辑精准:先判断CIRCUIT是否跨RING,再生成对应值,无多余计算。

效果示例

假设原数据如下:

RINGCLLICIRCUIT
R1CLLI1CIR1
R2CLLI2CIR1
R1CLLI3CIR2
R1CLLI4CIR2
R3CLLI5CIR3

处理后新增列结果:

RINGCLLICIRCUITNeigbourCLLI
R1CLLI1CIR1CLLI2
R2CLLI2CIR1CLLI1
R1CLLI3CIR2NaN
R1CLLI4CIR2NaN
R3CLLI5CIR3NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:30:30