【问题标题】:pandas selecting and assigning using lambdapandas 使用 lambda 选择和分配
【发布时间】:2015-03-13 14:58:33
【问题描述】:

我想从 DataFrame 中选择某些行并从中应用 lambda 的结果,但我无法正确分配它,所有其他列都变为 NaN 或 DataFrame 根本没有改变(我相信这一点与 DataFrame 返回副本有关,请阅读该警告)

这是我的数据框:

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。

最好的方法是什么?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    一种方法是将“在”逻辑放入 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 会更快。有没有更好的办法?充分利用 pandas 数据查询。
    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2021-07-09
    • 1970-01-01
    • 2017-02-20
    相关资源
    最近更新 更多