Python 使用lambda进行选择和分配
我想从数据帧中选择某些行,并从中应用lambda的结果,但我无法正确分配它,或者所有其他列都变为NaN,或者数据帧根本没有更改。我认为这与数据帧返回副本有关,请阅读该警告 这是我的数据框:Python 使用lambda进行选择和分配,python,pandas,Python,Pandas,我想从数据帧中选择某些行,并从中应用lambda的结果,但我无法正确分配它,或者所有其他列都变为NaN,或者数据帧根本没有更改。我认为这与数据帧返回副本有关,请阅读该警告 这是我的数据框: id type value -------------------------------------------- 1 1 "Store Name 1" 2 2 "Store
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似乎会更快。有更好的办法吗?这充分利用了数据查询。