如何将df.apply的返回结果分别赋值给DataFrame的两个新列
pandas使用apply逐行调用返回多值的函数并赋值多列的实现方法
你原有代码的问题在于df.apply默认按列遍历,且没有对返回的多值结果做展开处理,按照以下方式修改即可实现需求:
最优实现方案
在apply方法中新增两个参数:axis=1指定逐行处理,result_type='expand'自动将函数返回的元组展开为多列,直接赋值给目标列即可:
def f(a_list): # 你的自定义业务逻辑 if stuff: make_new_stuff_happen return new_list, a_double def main(): # 核心修改点 df[['new_col1', 'new_col2']] = df.apply(lambda x: f(x['some_col']), axis=1, result_type='expand')
兼容旧版本pandas的替代方案
如果你使用的pandas版本较低不支持result_type参数,也可以先接收返回的元组Series,再按索引拆分赋值:
def main(): # 先获取每行返回的元组组成的Series res_series = df.apply(lambda x: f(x['some_col']), axis=1) # 按位置拆分赋值给两个新列 df['new_col1'] = res_series.str[0] df['new_col2'] = res_series.str[1]
注意事项
axis=1是逐行处理的必传参数,默认axis=0会将整列数据传入自定义函数,不符合你的需求.str索引器不仅可用于字符串类型的Series,对于元素为可迭代对象的Series都可以通过该方式提取对应位置的元素
内容的提问来源于stack exchange,提问作者Josh Willis
相关产品推荐
相关产品推荐

