[PYTHON] Aggregationsfalle vom Pandas-Kategorietyp

Aggregationsfalle vom Pandas-Kategorietyp

Wenn dtype eine Kategorie ist, kann es auch für nicht vorhandene Werte aggregiert werden.

import pandas as pd  # version 1.1.2

#Definieren Sie DataFrame
df = pd.DataFrame({
    'col1': ['a', 'a', 'b', 'b', 'c', 'c'],
    'col2': [1, 2, 1, 2, 1, 2]
})
#Machen Sie col1 zu einem Kategorietyp
df['col1'] = df['col1'].astype('category')
#Kopieren Sie die ersten 3 Zeilen
df_sub = df.head(3).copy()
#Mit col1 gruppieren und über col2 aggregieren
df_grp = df_sub.groupby('col1')
df_agg = df_grp.agg({'col2': 'mean'}).reset_index()
df_agg.columns = ['col1', 'mean_col2']

df_sub ist wie folgt.

col1 col2
0 a 1
1 a 2
2 b 1

df_agg ist wie folgt.

col1 mean_col2
0 a 1.5
1 b 1.0
2 c NaN

Problem

Es gibt eine Zeile, in der col1 c ist, obwohl es für df_sub aggregiert werden sollte. Wenn Sie df_grp.groups aktivieren, ist dies {'a': [0, 1], 'b': [2], 'c': []}.

Gegenmaßnahmen

Die Definition von df_grp lautet wie folgt.

df_grp = df_sub.groupby('col1', observed=True)

Groupby-Dokumentation

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html

Recommended Posts

Aggregationsfalle vom Pandas-Kategorietyp