如何在Pandas DataFrame的apply函数中传入数组单个元素?
解决Pandas DataFrame apply函数传入数组单个元素的问题
你当前的代码无法实现需求,因为args=(array)会把整个数组作为参数传给addArray的b参数,而非逐行匹配数组的单个元素。以下是几种可行的实现方式:
方法1:结合行索引在apply中匹配数组元素
利用行的索引值(row.name)获取数组中对应的元素,实现逐行配对:
import pandas as pd df = {"A" : [1,2,3,4], "B" : [10, 20, 30, 40]} df = pd.DataFrame(df) array = [2,3,4,5] # 用lambda简化写法 df['C'] = df.apply(lambda row: row['A'] + array[row.name], axis=1) # 或者保留自定义函数的写法(注意args要传元组,末尾加逗号) def addArray(row, arr): return row['A'] + arr[row.name] df['C'] = df.apply(addArray, axis=1, args=(array,)) print(df)
运行后C列会得到[3,5,7,9],符合预期。
方法2:矢量化运算(更高效)
对于大数据量,优先使用Pandas的矢量化操作,比逐行apply性能更高:
df['C'] = df['A'] + pd.Series(array, index=df.index)
直接将数组转为和DataFrame索引一致的Series,再与A列做加法,本质是元素级别的匹配运算,效率远高于逐行循环。
内容的提问来源于stack exchange,提问作者scstx
相关产品推荐
相关产品推荐

