如何在Pandas的apply函数中传递两个DataFrame参数?
解决pandas apply传递多个DataFrame参数的问题
你遇到的核心问题是function_check_age_19需要两个参数,但调用apply时只传了行对象,参数缺失导致函数返回None。下面是两种可行的解决方式:
方法1:用lambda闭包传递额外参数
先调整function_check_age_19的定义,让它接收行对象和人口比例表两个参数:
def function_check_age_19(row, df_census): # 这里编写你的处理逻辑,比如根据行数据匹配df_census的比例计算人口 # 示例:假设row包含year字段,匹配df_census对应年份的年龄组比例 target_ratio = df_census[df_census['year'] == row['year']]['age_group_ratio'].values[0] calculated_pop = row['total_pop'] * target_ratio return calculated_pop
然后在split_population_18_19里调用apply时,通过lambda把df_census_final传入:
def split_population_18_19(df): result = df.apply(lambda row: function_check_age_19(row, df_census_final), axis=1) # 可将结果添加为df的新列 df['calculated_pop'] = result return df
方法2:用apply的args参数(更规范)
确保function_check_age_19的参数顺序正确(行对象在前,额外DataFrame在后),然后直接用apply的args参数传递:
def split_population_18_19(df): # args接收元组形式的额外参数,注意末尾逗号不能省略 result = df.apply(function_check_age_19, axis=1, args=(df_census_final,)) df['calculated_pop'] = result return df
关键注意点
- 必须保证
function_check_age_19有明确的return语句,否则即使参数传对,也会返回None。 - 不推荐直接在
function_check_age_19里使用全局变量df_census_final,显式传参的写法更利于代码复用和维护。
内容的提问来源于stack exchange,提问作者Mazil_tov998
相关产品推荐
相关产品推荐

