如何使用apply结合自定义函数为DataFrame新增多行数据?
实现方案
pandas.DataFrame.apply本身不支持直接返回多行完成行扩展,不需要刻意修改foo函数适配apply的返回逻辑,使用pandas原生的列表展开接口即可高效实现需求,操作步骤如下:
- 首先补全原有
foo函数的返回语句,让它正常返回计算得到的answers列表即可,无需额外改造:
def foo(row): if row['col1']==0: answers = ['zero'] elif row['col1']==1: answers = ['one', 'i'] elif row['col1']==2: answers = ['two', 'ii'] else: answers = ['three', 'iii'] return answers
- 执行两行核心代码完成列新增和行展开:
# 先通过apply生成存储列表的col4列 input_df['col4'] = input_df.apply(foo, axis=1) # 按col4的列表元素拆分为多行,重置索引后和期望输出格式完全匹配 result_df = input_df.explode('col4', ignore_index=True)
不推荐强行让apply返回多行:这种实现需要让每行apply返回一个子DataFrame,最后再做全表拼接,代码冗余且运行效率远低于原生
explode接口。explode是pandas专门为「列内存储可迭代对象、需要按元素拆分为独立行」的场景设计的API,最终输出的表结构、取值和你给出的期望结果完全一致。
内容的提问来源于stack exchange,提问作者SRISHTI GUREJA
相关产品推荐
相关产品推荐

