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

请求优化Pandas中基于字典列替换列值的向量化代码

向量化优化Pandas DataFrame字典列转换需求

问题背景

我需要对现有代码做向量化优化,寻求帮助或建议。我有一个Pandas DataFrame,其中包含由可用性检查函数生成的特殊列c,示例如下:

original_df = pd.DataFrame({
    'a':['a1', 'a2', 'a3', 'a4'],
    'b':['b1', 'b20', 'b98', 'b4'],
    'c':[{'a':'not_available', 'b': 'b1'}, {}, {'a':'a3', 'b': 'b98'}, {'a':'not_available', 'b': 'not_available'}],
})

原始DataFrame表格

abc
a1b1{'a': 'not_available', 'b': 'b1'}
a2b20{}
a3b98{'a': 'a3', 'b': 'b98'}
a4b4{'a': 'not_available', 'b': 'not_available'}

目标转换结果

希望基于列c中的字典转换列a和b的值,转换后的目标DataFrame如下:

desired_df = pd.DataFrame({
    'a':['not_available', 'a2', 'a3', 'not_available'],
    'b':['b1', 'b20', 'b98', 'not_available']})

目标DataFrame表格

ab
not_availableb1
a2b20
a3b98
not_availablenot_available

转换规则

  • 若列c中的字典为空,则保留对应行其他列的原有值;
  • 列c的字典中的值只能是对应列的当前值或'not_available'。

当前低效代码

目前使用的代码可以正常运行,但速度极慢:

for idx, row in original_df.iterrows():
    for key, value in row.c.items():
        original_df.loc[idx, key] = value

实际场景中,字典包含8个列,DataFrame通常有20-60行,这段代码用于API接口,性能分析显示该函数占用累计时间最高,显然是循环迭代导致的性能瓶颈。

补充说明

Shubam的解决方案已将该函数的耗时从20秒降至0.208秒,非常感谢!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:35:15