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
相关产品推荐
相关产品推荐

