为什么在 pandas 中使用“==”return 系列而不是 bool?

Why does using "==" return a Series instead of bool in pandas?

我只是不明白第二行的“==”是什么意思:
- 这不是测试,没有 if 语句...
- 这不是变量声明...

我以前从没见过这个,问题是 data.ctage==cat 是 pandas 系列而不是测试...

for cat in data["categ"].unique():
    subset = data[data.categ == cat] # Création du sous-échantillon
    print("-"*20)
    print('Catégorie : ' + cat)
    print("moyenne:\n",subset['montant'].mean())
    print("mediane:\n",subset['montant'].median())
    print("mode:\n",subset['montant'].mode())
    print("VAR:\n",subset['montant'].var())
    print("EC:\n",subset['montant'].std())
    plt.figure(figsize=(5,5))
    subset["montant"].hist(bins=30) # Crée l'histogramme
    plt.show() # Affiche l'histogramme

它创建一个带有索引的布尔系列,其中 data.categ 等于 cat ,使用此布尔掩码,您可以过滤数据框,换句话说 subset 将包含所有记录其中 categ 是存储在 cat.

中的值

这是一个使用数字数据的示例

np.random.seed(0)
a = np.random.choice(np.arange(2), 5)
b = np.random.choice(np.arange(2), 5)
df = pd.DataFrame(dict(a = a, b = b))


df[df.a == 0].head()

#   a   b
# 0 0   0
# 2 0   0
# 4 0   1

df[df.a == df.b].head()

#   a   b
# 0 0   0
# 2 0   0
# 3 1   1

它正在测试 data.categ 的每个元素是否与 cat 相等。这会产生一个 True/False 值的向量。这作为索引器传递给 data[],其中 returns 来自 data 的行对应于向量中的真值。

总而言之,整个表达式 returns 来自 data 的行的子集,其中 data.categ 的值等于 cat

(似乎可以使用 data.groupBy('categ').apply(someFunc) 更优雅地完成整个操作。)

是的,它一个测试。布尔表达式 限于 if 语句。

看起来好像data是一个数据框(PANDAS)。用作数据帧索引的表达式是 PANDAS 表示 selector 或过滤器的方式。这表示 select 字段 categ 与变量 cat (显然是预定义变量)匹配的每一行。此行集合成为一个新的数据框,subset

data.categ == cat 将 return 一个布尔值列表,该列表将用于通过仅保留布尔值等于 True.

的值来过滤数据框

布尔值在许多情况下使用,不仅在 if 语句中。

此处您正在检查 data.categ 与元素迭代,cat,在 data 的字典中。
如果它们相等,您将继续循环。