pandas使用lambda选择和分配

时间:2015-03-13 03:56:01

标签: python pandas

我想从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。

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

1 个答案:

答案 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)