Почему группировка-агрегация pandas отбрасывает столбец категорий? - PullRequest
0 голосов
/ 26 августа 2018

Ситуация

Рассмотрим следующие два кадра данных:

import pandas as pd  # version 0.23.4

df1 = pd.DataFrame({
    'A': [1, 1, 1, 2, 2],
    'B': [100, 100, 200, 100, 100],
    'C': ['apple', 'orange', 'mango', 'mango', 'orange'],
    'D': ['jupiter', 'mercury', 'mars', 'venus', 'venus'],
})

df2 = df1.astype({'D': 'category'})

Как видно из кадра данных df2 столбец D относится к категориям типу данных, но в остальном df2 идентичен df1.

Теперь рассмотрим следующие операции группового агрегирования:

result_x_df1 = df1.groupby(by='A').first()
result_x_df2 = df2.groupby(by='A').first()
result_y_df1 = df1.groupby(by=['A', 'B']).first()
result_y_df2 = df2.groupby(by=['A', 'B']).first()

с результатами, которые выглядят следующим образом:

In [1]: result_x_df1
Out[1]:
     B      C        D
A
1  100  apple  jupiter
2  100  mango    venus

In [2]: result_x_df2
Out[2]:
     B      C        D
A
1  100  apple  jupiter
2  100  mango    venus

In [3]: result_y_df1
Out[3]:
           C        D
A B
1 100  apple  jupiter
  200  mango     mars
2 100  mango    venus

In [4]: result_y_df2
Out[4]:
           C
A B
1 100  apple
  200  mango
2 100  mango

Вопрос

result_x_df1, result_x_df2 и result_y_df1 выглядят именно так, как я и ожидал.Что меня действительно озадачивает, так это то, что в result_y_df2 столбце категорических данных D был полностью отброшен .Возникают вопросы:

  • Почему столбец категорий D отбрасывается в result_y_df2?
  • Как можно предотвратить удаление столбца категорий 10 *, то есть как я могуполучить результат группирования-агрегирования из df2, который выглядит как result_y_df1?

1 Ответ

0 голосов
/ 27 августа 2018

Может показаться, что причиной проблемы является ошибка регрессии в пандах (происходящая с версии 0.23.0 и выше).Обходной путь - использовать head(1) вместо first() (как предложено Dark).

См. этот выпуск pandas github для новых разработок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...