Python中为DataFrame列表批量应用函数的问题
问题解决方法
核心问题
你的循环仅调用rateCalc但未将处理后的DataFrame存回列表,且pandas.DataFrame.assign()返回的是新对象,不会修改原DataFrame。另外要确保dfList是列表(用[]定义)而非元组(仅逗号分隔),元组无法修改元素。
修正后的循环代码
方法1:索引循环赋值
# 先确保dfList是列表格式 dfList = [df0, df1, df2, df3, df4, df5, df6, df7] for i in range(len(dfList)): dfList[i] = rateCalc(dfList[i])
方法2:列表推导式(更简洁)
dfList = [rateCalc(df) for df in dfList]
可选:优化rateCalc函数(矢量化操作,提升效率)
原函数逐行循环处理效率较低,若你使用的是statsmodels.stats.proportion.proportion_confint,它支持批量输入,可改成矢量化操作:
def rateCalc(outcomeDataFrame): # 直接计算midrate列 outcomeDataFrame['midrate'] = outcomeDataFrame.iloc[:,4] / outcomeDataFrame.iloc[:,3] # 批量计算所有行的置信区间 lowerRate, upperRate = proportion_confint( count=outcomeDataFrame.iloc[:,4], nobs=outcomeDataFrame.iloc[:,3] ) # 添加置信区间列 outcomeDataFrame['lowerRate'] = lowerRate outcomeDataFrame['upperRate'] = upperRate return outcomeDataFrame
内容的提问来源于stack exchange,提问作者kpdawson24
相关产品推荐
相关产品推荐

