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

如何以pandas风格高效处理DataFrame单元格set集合元素并调用函数

实现方案优化

你当前的三层循环写法功能正确,适合小数据量场景下使用,可读性强便于调试。如果需要更高的运行效率或者更简洁的代码,可以参考以下两种优化方案:

方案1:行级apply实现(中等数据量适用)

相比iterrows遍历,apply方法的内部实现性能更高,同时可以把多层循环压缩到一行:

import pandas as pd

def my_func(a, b):
    pass

d = {"a": [{1}, {4}], "b": [{1, 2, 3}, {2}]}
df = pd.DataFrame(d)

# axis=1表示按行遍历,row.name就是当前行的索引
df.apply(lambda row: [my_func(row.name, num) for cell in row for num in cell], axis=1)

方案2:explode拆分行实现(大数据量适用)

pandas 0.25及以上版本支持explode方法,可以直接把集合类型的单元格拆分为单独行,仅需要一层遍历即可完成调用,运行速度最快:

# 先把多列合并为单列,再拆分集合元素为单独行
exploded_series = df.stack().explode().reset_index(level=1, drop=True)

# 遍历调用函数,index为原行索引,value为集合中的数字
for idx, num in exploded_series.items():
    my_func(idx, num)

选型参考

  • 数据量小于1万行:原三层循环写法完全可用,不需要修改
  • 数据量1万~100万行:推荐使用方案1,兼顾性能和兼容性
  • 数据量大于100万行:推荐使用方案2,性能最优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:06:02