Python - 基于其他数据帧中满足的条件的PANDAS数据帧列的数量'列

时间:2017-07-20 16:37:03

标签: python pandas dataframe conditional custom-function

我有3个数据帧(df1,df2,df3),它们具有相同的结构(#和行/列的标签),但填充了不同的值。

我想根据df1和df2中相关列/行中的值填充df3。我使用FOR循环和自定义函数执行此操作:

for x in range(len(df3.columns)):
    df3.iloc[:, x] = customFunction(x)

我想使用这个自定义IF / ELSE函数填充df3:

def customFunction(y):
    if df1.iloc[:,y] <> 1 and df2.iloc[:,y] = 0:
        return "NEW"
    elif df2.iloc[:,y] = 2:
        return "OLD"
    else:
        return "NEITHER"

我理解为什么在运行此操作时会收到错误消息,但我无法弄清楚如何将此功能应用于系列。我可以用更复杂的代码逐行完成,但我希望有更高效的解决方案吗?我担心我的方法存在缺陷。

2 个答案:

答案 0 :(得分:1)

v1 = df1.values
v2 = df2.values

df3.loc[:] = np.where(
    (v1 != 1) & (v2 == 0), 'NEW',
    np.where(v2 == 2, 'OLD', 'NEITHER'))

答案 1 :(得分:0)

是的,尽量避免使用pandas中的循环,效率低下,并且可以与底层的numpy矢量化一起使用。

您想使用apply功能。

类似的东西:

df3['new_col'] = df3.apply(lambda x: customFunction(x))

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html