групповые проблемы преобразования в скалярный индекс - PullRequest
0 голосов
/ 12 октября 2019

У меня есть фрейм данных, df, со следующими столбцами:

id                  int64
quarter    datetime64[ns]
decile              int64
dtype: object

Когда я запускаю groupby,

df.groupby(['id', 'quarter'])

Я получаю следующую ошибку:

TypeError: only integer scalar arrays can be converted to a scalar index

Я думаю, что правильный вопрос таков: что вывод dtypes не говорит мне, так что я могу фактически использовать мои int и datetime для индекса?

versions:
pandas: 0.25.1
python: sys.version_info(major=3, minor=7, micro=3, releaselevel='final', serial=0)

ДополнительноЗамечание по поводу ошибки: ошибка исчезнет, ​​если я избегу переименования столбцов заранее. Успех переименования подтверждается при запуске метода dtypes.

Наконец, вот еще один пример той же ошибки, возникающей после groupby и переименования (в этом примере переименование глупо, но требуется, когда я включаю date в свою агрегацию; я показываю только минимальноекод, необходимый для генерации ошибки)

# resample to quarterly
quart = df.groupby(
[pd.Grouper(key='id'),
 pd.Grouper(key='date', freq='Q')]).agg({'call_qty':'sum'})

quart.columns = [['call_qty']]  # << toggle this renaming code to trigger the error

F = quart['call_qty'].isna()

Генерирует ошибку:

TypeError: only integer scalar arrays can be converted to a scalar index

Спасибо всем, кто что-то знает об этом.

1 Ответ

0 голосов
/ 12 октября 2019

Я попытался воспроизвести вашу ошибку, но безуспешно.

Исходный DataFrame, который я создал как:

   id    quarter  decile
0   1 2019-01-01       5
1   1 2019-01-01       6
2   2 2019-04-01       1
3   2 2019-04-01       2
4   2 2019-07-01       3
5   2 2019-07-01       4

dtype s, как и выописано).

Я попытался сгруппировать в одиночку , как вы утверждаете в своем комментарии:

gr = df.groupby(['id', 'quarter'])

и ошибки не произошло.

Чтобы проверить результат, я вычислил среднее значение для каждой группы:

gr.mean()

получив:

               decile
id quarter           
1  2019-01-01     5.5
2  2019-04-01     1.5
   2019-07-01     3.5

В качестве другого теста я напечатал содержимое каждой группы:

for key, grp in gr:
    print(f'\nGroup: {key}\n{grp}')

получение:

Group: (1, Timestamp('2019-01-01 00:00:00'))
   id    quarter  decile
0   1 2019-01-01       5
1   1 2019-01-01       6

Group: (2, Timestamp('2019-04-01 00:00:00'))
   id    quarter  decile
2   2 2019-04-01       1
3   2 2019-04-01       2

Group: (2, Timestamp('2019-07-01 00:00:00'))
   id    quarter  decile
4   2 2019-07-01       3
5   2 2019-07-01       4

Итак, как вы можете видеть, с «нормальными» (представленными выше) исходными данными не возникает ошибки.

Возможно, у вас есть некоторыестарая версия Python или Pandas ? Обновитесь до текущей версии и повторите тест.

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