我想从DataFrame中选择某些行并从中应用lambda的结果,并且我无法正确分配它,要么所有其他列都变为NaN,要么DataFrame根本没有更改(我相信这一点)与DataFrame有关,返回一个副本,读取该警告)
这是我的DataFrame:
id type value
--------------------------------------------
1 1 "Store Name 1"
2 2 "Store Name 2"
3 3 123
它的要点,我想选择"键入" == [1,2]并在值列上运行lambda函数并使用返回值进行设置 这是我的尝试:
p1['value'] = p1[p1['type'].isin([1,2])]['value'].apply(
lambda v: Store.objects.get(name=v).id
)
这设置了[1,2]类型的值,但不幸的是,它还将所有其他值设置为NaN。
实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
一种方法是将你的"放在"逻辑到你的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)