DataFrame 根据提供的谓词更改多列的值
DataFrame change values of multiple columns according to provided predicate
鉴于:
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 个参数和 returns 一个布尔值。
我想要这样的东西:
result = df[['x', 'y']].apply(f)
并得到一个布尔向量,根据谓词函数f.
例如if f = lambda x, y: x > 3 and y < 3
、result
应该等于[False, False, False, True, True]
.
有没有一种简单的方法可以做到这一点?我还没有找到解决方案。
这里不需要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
鉴于:
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 个参数和 returns 一个布尔值。
我想要这样的东西:
result = df[['x', 'y']].apply(f)
并得到一个布尔向量,根据谓词函数f.
例如if f = lambda x, y: x > 3 and y < 3
、result
应该等于[False, False, False, True, True]
.
有没有一种简单的方法可以做到这一点?我还没有找到解决方案。
这里不需要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