Python 使用lambda进行选择和分配

Python 使用lambda进行选择和分配,python,pandas,Python,Pandas,我想从数据帧中选择某些行,并从中应用lambda的结果,但我无法正确分配它,或者所有其他列都变为NaN,或者数据帧根本没有更改。我认为这与数据帧返回副本有关,请阅读该警告 这是我的数据框: id type value -------------------------------------------- 1 1 "Store Name 1" 2 2 "Store

我想从数据帧中选择某些行,并从中应用lambda的结果,但我无法正确分配它,或者所有其他列都变为NaN,或者数据帧根本没有更改。我认为这与数据帧返回副本有关,请阅读该警告

这是我的数据框:

id     type               value
--------------------------------------------
 1        1                 "Store Name 1"
 2        2                 "Store Name 2"
 3        3                 123
要点是,我想选择type==[1,2],在value列上运行lambda函数,并用返回值设置它 以下是我的尝试:

p1['value'] = p1[p1['type'].isin([1,2])]['value'].apply(
        lambda v: Store.objects.get(name=v).id
    )
这将为[1,2]类型设置值,但不幸的是,它还将所有其他值设置为NaN


实现这一点的最佳方法是什么?

一种方法是将is in逻辑放入lambda函数中,而不更改任何不匹配的行:

p1['value'] = p1.apply(lambda row: Store.objects.get(name=row.value).id if row.type in [1,2] else row.value, axis=1)

这确实有效,但使用pandas API似乎会更快。有更好的办法吗?这充分利用了数据查询。