Почему использование "==" возвращает серию вместо bool в pandas? - PullRequest
8 голосов
/ 20 апреля 2020

Я просто не могу понять, что означает "==" во второй строке:
- Это не тест, нет оператора 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

Ответы [ 5 ]

10 голосов
/ 20 апреля 2020

Проверяется каждый элемент data.categ на равенство с cat. Это создает вектор значений True / False. Это передается как в индексаторе в data[], который возвращает строки из data, которые соответствуют значениям True в векторе.

В итоге, все выражение возвращает подмножество строк из data где значение data.categ равно cat.

(кажется возможным, что вся операция может быть выполнена более элегантно с использованием data.groupBy('categ').apply(someFunc).)

2 голосов
/ 20 апреля 2020

Здесь вы проверяете data.categ с итерацией элемента, cat, в словаре data.
И если они равны, вы продолжаете l oop.

2 голосов
/ 20 апреля 2020

data.categ == cat вернет логический список, который будет использоваться для фильтрации вашего фрейма данных, оставляя только те значения, для которых логическое значение равно True.

Логические значения используются во многих ситуациях, а не только в if заявления.

2 голосов
/ 20 апреля 2020

Да, это - это тест. Булевы выражения не ограничены if операторами.

Похоже, что data является фреймом данных (PANDAS). Выражение, используемое в качестве индекса фрейма данных, означает, как PANDAS обозначает селектор или фильтр. Это говорит о выборе каждой строки, в которой введенный файл categ соответствует переменной cat (очевидно, предопределенная переменная). Эта коллекция строк становится новым фреймом данных, subset.

2 голосов
/ 20 апреля 2020

Создает логическую серию с индексами, где data.categ равен cat, с этой логической маской вы можете фильтровать ваш фрейм данных, другими словами subset будет иметь все записи, где categ является значением хранится в cat.

Это пример использования числительных c data

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
...