Как группировать по столбцам? - PullRequest
3 голосов
/ 22 апреля 2019

У меня проблемы с выяснением, как группировать строки по столбцам. Моя цель - подсчитать количество «кодов пакетов», в которых значения столбцов оранжевого и синего цвета.

Я работаю с тысячами строк данных. Это подмножество данных:

Country   Package Code   Color    Type
US        100            Orange    a
US        100            Orange    b
US        100            Orange    c
Mexico    200            Green     d
US        300            Blue      e
Canada    400            Red       f
Germany   500            Red       g
Germany   600            Blue      h

Желаемый вывод:

Country   Packages
US         2
Mexico     0
Canada     0
Germany    1

1 Ответ

3 голосов
/ 22 апреля 2019

Использование isin + nunique + reindex

(df.loc[df.Color.isin(['Orange', 'Blue'])].groupby('Country')['Package Code']
    .nunique().reindex(df.Country.unique(), fill_value=0)).to_frame('Total').reset_index()

   Country  Total
0       US      2
1   Mexico      0
2   Canada      0
3  Germany      1

Здесь приведенная выше команда немного разбита для лучшей читаемости:

# Select rows where the color is Orange or Blue
u = df.loc[df.Color.isin(['Orange', 'Blue'])]

# Find the unique values for Package Code, grouped by Country
w = u.groupby('Country')['Package Code'].nunique()

# Add in missing countries with a value of 0
w.reindex(df.Country.unique(), fill_value=0).to_frame('Total').reset_index()
...