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