【问题标题】:DataFrame change values of multiple columns according to provided predicateDataFrame 根据提供的谓词更改多列的值
【发布时间】:2020-11-25 16:29:53
【问题描述】:

给定:

from pandas import DataFrame
import pandas as pd

d = {'x':[2,3,1,4,5],
     'y':[5,4,3,2,1],
     'letter':['a','a','b','b','c']}

df = DataFrame(d)

还有一些函数 p,它接受 2 个参数并返回一个布尔值。
我想要类似的东西:

result = df[['x', 'y']].apply(f)

并根据谓词函数f得到一个布尔向量。
例如,if f = lambda x, y: x > 3 and y < 3result 应等于 [False, False, False, True, True]
有没有一种简单的方法可以做到这一点?我还没有找到解决方案。

【问题讨论】:

  • apply(lambda row: f(row['a'], row['b']), axis=1)

标签: python pandas dataframe predicate


【解决方案1】:

这里不需要apply。位逻辑将为您提供所需的:

import pandas

d = {'x':[2,3,1,4,5],
     'y':[5,4,3,2,1],
     'letter':['a','a','b','b','c']}

df = (
    pandas.DataFrame(d)
        .assign(
            condition=lambda df: (df['x'] > 3) & (df['y'] < 3)
        )
)
df

这给了我:

   x  y letter  condition
0  2  5      a      False
1  3  4      a      False
2  1  3      b      False
3  4  2      b       True
4  5  1      c       True

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2021-01-09
    • 2022-07-04
    • 2012-10-15
    • 1970-01-01
    • 2019-04-06
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多