布尔索引,尝试用两个条件按标签搜索,但布尔和、按位 & 和 numpy logical_and 所有 return 错误

Boolean indexing, trying to search by label with two conditions but boolean and, bitwise &, and numpy logical_and all return errors

我正在尝试 return pandas 中与我选择的标签相对应的数据框行。例如,在我的函数 Female 中,它 returns 所有患者为女性的行。对于 AgeRange,我已经 运行 解决了满足这两个条件而没有出现错误的问题。

dataset = pd.read_csv('insurance.csv')

def Female(self):
    rows = dataset[dataset.sex == 1]
    print(rows)

def AgeRange(self):
    rows = dataset[dataset.age > 0] & dataset[dataset.age < 20]
    print(rows)

使用按位运算符会出现以下错误:TypeError: unsupported operand type(s) for &: 'float' and 'bool'

def AgeRange(self):
    rows = dataset[dataset.age > 0] and dataset[dataset.age < 20]
    print(rows)

使用布尔值和运算符得到以下错误:ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

def AgeRange(self):
    rows = np.logical_and(dataset[dataset.age > 0],dataset[dataset.age < 20])
    print(rows)

使用 numpy 逻辑并得到错误:ValueError:操作数无法与形状 (1309,7) (135,7) 一起广播。

老实说,我不确定这给我留下了什么,或者首先是什么导致了这个问题。谁能帮助指出我哪里出错了?

标准语法是

df[(df['a'] > X) & (df['a'] < Y)]

或使用查询():

df.query('X < a < Y') 

这个语法对我来说更简单!如果你有3个不同的条件想同时满足

cond1 = df["id"] == id
cond2  = df["date"] > date_min
cond3  = df["date"] < date_max

result = df[cond1 & cond2 & cond3]