如何将自定义函数按单元格/元素应用于两个数据框?

时间:2018-07-10 08:44:09

标签: python pandas dataframe

如何通过每个单元格/元素将函数f应用于df1和df2?

df1 = pd.DataFrame([[1,1,1],[2,2,2],[3,3,3]], columns=['a','b','c'])

df2 = pd.DataFrame([[10,10,10],[20,20,20],[30,30,30]], columns=['a','b','c'])

def f(a,b):return(a+b+1)

1 个答案:

答案 0 :(得分:1)

您可以np.vectorize [numpy-doc]函数f

from numpy import vectorize

fvec = vectorize(f)

df3 = pd.DataFrame(fvec(df1, df2), columns=df1.columns, index=df1.index)

但是重要的是,在进行矢量化之前,列和索引必须相同(并且顺序相同),因为numpy会丢弃此元数据。

因此,我们使用结果构建一个numpy数组,并通过从两个数据帧之一中获取索引和列来“ 重建”。但是,这两个数据帧可能首先需要进行一些预处理

向量化可能会发生任意个数据帧(因此,您可以定义一个函数f,例如,需要三个元素逐个应用于三个数据帧),但注释相同如上所述:您首先需要确保数据框的列和索引匹配。