¿Por qué el uso de "==" devuelve una serie en lugar de bool en pandas?

8

Simplemente no puedo entender qué significa "==" en la segunda línea:
- No es una prueba, no hay una declaración if ...
- No es una declaración variable ...

Nunca he visto esto antes, la cosa data.ctage==cates una serie de pandas y no una prueba ...

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
Amaumox
fuente
1
¿Quizás están haciendo una comparación por elementos de dos matrices numpy y están utilizando la matriz booleana resultante como un selector de datos? stackoverflow.com/questions/10580676/… Pandas es raro.
Neil
1
Es una máscara como positive_X = X[X > 0]de numpy.
Guimoute

Respuestas:

10

Está probando cada elemento de data.categigualdad con cat. Eso produce un vector de valores Verdadero / Falso. Esto se pasa como en el indexador a data[], que devuelve las filas dedata correspondientes a los valores verdaderos en el vector.

Para resumir, la expresión completa devuelve el subconjunto de filas desde datadonde el valor de data.categes igualcat .

(Parece posible que toda la operación se pueda hacer de manera más elegante data.groupBy('categ').apply(someFunc)).

Dave Costa
fuente
2

Crea una serie booleana con índices donde data.categes igual cat, con esta máscara booleana, puede filtrar su marco de datos, en otras palabras subset, tendrá todos los registros donde categestá el valor almacenado encat .

Este es un ejemplo usando datos numéricos

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
jcaliz
fuente
2

Si, es una prueba. Las expresiones booleanas no están restringidas aif declaraciones.

Parece que dataes un marco de datos (PANDAS). La expresión utilizada como índice de marco de datos es cómo PANDAS denota un selector o filtro. Esto dice que seleccione cada fila en la que el campo categcoincida con la variable cat(aparentemente una variable predefinida). Esta colección de filas se convierte en una nueva trama de datos, subset.

Ciruela pasa
fuente
2

data.categ == catdevolverá una lista booleana que se usará para filtrar su marco de datos al incluir solo valores donde boolean es igual True.

Los booleanos se usan en muchas situaciones, no solo en ifdeclaraciones.

Henrique Branco
fuente
2

Aquí está comprobando data.categcon el elemento iterando,, caten el diccionario de data.
Y si son iguales, continuará el ciclo.

Harshit Ruwali
fuente