如何对Pandas DataFrame的指定行子集应用新增列的自定义函数
问题原因
你原来的写法仅会匹配原DataFrame已有的列进行赋值,函数新增的列不在原表的列列表中,对应内容会被直接丢弃,所以看不到更新效果。
解决方案
你可以先拿到处理后的子表,自动识别新增的列后再写入原表,不需要手动指定新增的列名,适配任意数量的新增列场景:
import pandas def arbitrary_function_that_adds_columns(df): # 先拷贝避免修改传入的原数据,减少副作用 df = df.copy() df['new column'] = df['A'] + df['B'] / 8 + df['A']**3 return df df = pandas.DataFrame({'A': [1,2,3,4], 'B': [2,3,4,5]}) # 此处加~是为了匹配你给出的期望输出,若要给A为1、3的行赋值去掉~即可 rows = ~df['A'].isin({1,3}) # 处理目标行的子表 processed_subdf = arbitrary_function_that_adds_columns(df.loc[rows]) # 自动识别所有新增列,写入原表 for new_col in processed_subdf.columns.difference(df.columns): df[new_col] = pandas.NA df.loc[rows, new_col] = processed_subdf[new_col] print(df)
运行后输出和你期望的结果完全一致:
A B new column 0 1 2 <NA> 1 2 3 10.375 2 3 4 <NA> 3 4 5 68.625
逻辑说明
- 先通过
columns.difference对比处理后的子表和原表的列差,自动找出所有新增的列 - 先给原表初始化这些新增列,默认填充空值
- 再把处理后的结果赋值给目标行的对应列,不管函数新增多少列都可以通用适配
内容的提问来源于stack exchange,提问作者user171780
相关产品推荐
相关产品推荐

