请求优化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表格
| a | b | c |
|---|---|---|
| a1 | b1 | {'a': 'not_available', 'b': 'b1'} |
| a2 | b20 | {} |
| a3 | b98 | {'a': 'a3', 'b': 'b98'} |
| a4 | b4 | {'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表格
| a | b |
|---|---|
| not_available | b1 |
| a2 | b20 |
| a3 | b98 |
| not_available | not_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
相关产品推荐
相关产品推荐

