对掩码结果调用 pandas apply 函数

inf*_*oop 2 python pandas

我想根据掩码中描述的某些条件将函数应用于数据框中的行子集。例如:

mask = (n.city=='No City Found')
n[mask].city = n[mask].address.apply(lambda x: find_city(x))
Run Code Online (Sandbox Code Playgroud)

当我这样做时,pandas 警告我,我正在尝试在 Dataframe 切片的副本上设置一个值。当我检查数据框时,我发现我的更改尚未保留。

如果我使用mask创建一个新的 Dataframe 切片 x并将该函数应用于 x,则应用函数的结果将正确存储在 x 中。

x = n[mask]
x.city = x.address.apply(lambda x: find_city(x))
Run Code Online (Sandbox Code Playgroud)

有没有办法将此数据映射回我的原始数据框,以便它只影响满足原始掩码中描述的条件的行?

或者是否有更简单的方法来执行这样的操作?

jca*_*liz 6

更新值的正确方法是使用loc

n.loc[mask, 'city'] = n[mask].address.apply(lambda x: find_city(x))
Run Code Online (Sandbox Code Playgroud)

如果您想节省变量的内存,您也可以不使用掩码来执行此操作

n['city']=n.address.apply(
    lambda x: find_city(x)
    if x.city == 'No City Found' else x.city, axis=1
)
Run Code Online (Sandbox Code Playgroud)