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

Pandas带条件列聚合拼接:大表路径生成及效率对比

解决方案与效率对比

对于30万行的大表,向量化的聚合/拼接操作远快于apply逐行处理——apply本质是Python层面的循环,而向量化操作是利用Pandas/NumPy的C底层优化,批量处理数据,效率差距会随着数据量增大而更明显。

高效实现步骤

1. 批量替换location_statindex

不用apply,用两种向量化方法实现规则替换:

方法一:np.select(适合多条件分支)
import numpy as np

# 定义条件和对应替换值
conditions = [
    df['location_statindex'].isin(['1','2','3','4']),
    df['location_statindex'].isin(['5','6'])
]
choices = [
    'Platz_optimiert_' + df['location_statindex'],
    'KSPlatz_' + df['location_statindex']
]
# 处理else分支
df['location_formatted'] = np.select(conditions, choices, default='Platz_optimiert_TEF_' + df['location_statindex'])
方法二:字典映射(更简洁,适合规则清晰的场景)
# 构建映射字典
loc_map = {}
# 处理1-4
for loc in ['1','2','3','4']:
    loc_map[loc] = f'Platz_optimiert_{loc}'
# 处理5-6
for loc in ['5','6']:
    loc_map[loc] = f'KSPlatz_{loc}'
# 其他值用lambda处理
df['location_formatted'] = df['location_statindex'].map(lambda x: loc_map.get(x, f'Platz_optimiert_TEF_{x}'))

2. 批量拼接路径

用Pandas的字符串向量化拼接str.cat,比逐行agg('\'.join, axis=1)效率更高:

# 直接拼接(Windows路径反斜杠需转义)
df['folder_path'] = df['location_formatted'] + '\\' + df['year'] + '\\' + df['month'] + '\\' + df['day'] + '\\' + df['hour']

# 或者用str.cat更优雅:
df['folder_path'] = df['location_formatted'].str.cat([df['year'], df['month'], df['day'], df['hour']], sep='\\')

效率对比说明

  • 对于30万行数据,apply自定义函数的处理时间可能是向量化操作的5-20倍(具体取决于函数复杂度)。
  • 上述方案中,np.select+str.cat的组合是最快的,完全规避了Python层面的循环,所有操作都是底层批量处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:25:19