Группировка данных с использованием Python - PullRequest
0 голосов
/ 25 сентября 2018

Мой фрейм данных:

  ordercode             quantity
PMC21-AA1U1FBWBJA           1
PMP23-GR1M1FB3CJ            1
PMC11-AA1U1FJWWJA           1
PMC11-AA1U1FBWWJA+I7        2
PMC11-AA1U1FJWWJA           3
PMC11-AA1L1FJWWJA           3

Мой желаемый результат:

  Group    ordercode                quantity
    0       PMC21-AA1U1FBWBJA           1
            PMP23-GR1M1FB3CJ            1
             PMC11-AA1U1FJWWJA          1
            PMC11-AA1U1FBWWJA+I7        1
    1      PMC11-AA1U1FBWWJA+I7         1
            PMC11-AA1U1FJWWJA           3
    2      PMC11-AA1L1FJWWJA            3

Так что здесь мой желаемый результат основан на column['quantity'].Максимальное значение количества составляет 4.

В group0 & group1 суммарные значения (1 + 1 + 1 + 1 = 4) (1 + 3 = 4) (т. Е. Сохранение максимального значения количества равным 4).В group2 мы можем видеть, что нет добавляемых значений, поэтому группа формируется с помощью остатка (здесь это 3).В group0 & group1 мы можем видеть, что значение PMC11-AA1U1FBWWJA+I7 разбивается.

Я получил небольшую помощь от форума и выполнил следующую кодировку:

df = pd.DataFrame(np.concatenate(df.apply(lambda x: [x[0]] * x[1], 1).as_matrix()), 
              columns=['ordercode'])
df['quantity'] = 1
df['group'] = sorted(range(0, len(df)/3, 1) * 4)[0:len(df)]
df.groupby(['group', 'ordercode']).sum()

, но я получаю ошибку.

Type error: 'float' object cannot be interpreted as an integer

Если я использую int в

df['group'] = sorted(range(0, int(len(df)/3), 1) * 4)[0:len(df)]

снова получаю typeerror.Кто-нибудь может сказать мне, почему?

1 Ответ

0 голосов
/ 25 сентября 2018

Если вы используете Python3, введите двойную косую черту // для целочисленного деления и преобразования диапазона в список.

df['group'] = sorted(list(range(0, len(df) // 3, 1)) * 4)[0:len(df)]

Для второй попытки это выглядит следующим образом.

df['group'] = sorted(list(range(0, int(len(df) / 3), 1)) * 4)[0:len(df)]

Итак, полный код работает следующим образом.Я скопировал ваш пример в буфер обмена перед запуском.

import pandas as pd
import numpy as np
df = pd.read_clipboard()
df = pd.DataFrame(np.concatenate(df.apply(lambda x: [x[0]] * x[1], 1).as_matrix()), 
              columns=['ordercode'])
df['quantity'] = 1
df['group'] = sorted(list(range(0, len(df) // 3, 1)) * 4)[0:len(df)]
df = df.groupby(['group', 'ordercode']).sum()
print(df)

Команда ".as_matrix ()", которую вы использовали, генерирует предупреждение, но работает.

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