1

我有 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"

我明白为什么我在运行它时会收到一条错误消息,但我不知道如何将此功能应用于系列。我可以用更复杂的代码逐行完成,但我希望有一个更有效的解决方案?我担心我的方法有缺陷。

4

2 回答 2

1
v1 = df1.values
v2 = df2.values

df3.loc[:] = np.where(
    (v1 != 1) & (v2 == 0), 'NEW',
    np.where(v2 == 2, 'OLD', 'NEITHER'))
于 2017-07-20T17:07:31.943 回答
0

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

您想使用应用功能。

就像是:

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

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

于 2017-07-20T16:49:30.313 回答