Введите даты (пропущенные после группировки по двум столбцам) с количеством_потоков = 0 в кадре данных - PullRequest
0 голосов
/ 01 июля 2019

Я работаю со столбцами UPC (product #), date_expected и amount_picked, и мне нужно, чтобы мои данные были организованы так, чтобы отображать общее количество за день (для каждого дня) для каждого UPC. Пример данных ниже:

                 UPC  quantity_picked       date_expected
0      0001111041660              1.0 2019-05-14 15:00:00
1      0001111045045              1.0 2019-05-14 15:00:00
2      0001111050268              1.0 2019-05-14 15:00:00
3      0001111086132              1.0 2019-05-14 15:00:00
4      0001111086983              1.0 2019-05-14 15:00:00
5      0001111086984              1.0 2019-05-14 15:00:00
             ...              ...                 ...
39694  0004470036000              6.0 2019-06-24 20:00:00
39695  0007225001116              1.0 2019-06-24 20:00:00

Я смог успешно организовать свои данные таким образом, используя приведенный ниже код, но выходные данные не содержат дат с количеством_пика = 0

orders = pd.read_sql_query(SQL, con=sql_conn)
order_daily = orders.copy()
order_daily['date_expected'] = order_daily['date_expected'].dt.normalize()
order_daily['date_expected'] = pd.to_datetime(order_daily.date_expected, format='%Y-%m-%d')

# Groups by date and UPC getting the sum of quanitity picked for each
# then resets index to fill in dates for all rows
tipd = order_daily.groupby(['UPC', 'date_expected']).sum().reset_index()
# Rearranging of columns to put UPC column first
tipd = tipd[['UPC','date_expected','quantity_picked']]

дает следующий вывод:

                 UPC date_expected  quantity_picked
0      0000000002554    2019-05-21              4.0
1      0000000002554    2019-05-24              2.0
2      0000000002554    2019-06-02              2.0
3      0000000002554    2019-06-17              2.0
4      0000000003082    2019-05-15              2.0
5      0000000003082    2019-05-16              2.0
6      0000000003082    2019-05-17              8.0
             ...           ...              ...
31588  0360600051715    2019-06-17              1.0
31589  0501072452748    2019-06-15              1.0
31590  0880100551750    2019-06-07              2.0

Когда я пытаюсь следовать решению, данному в: Панды, заполняющие недостающие даты и значения в группе Я настраиваю свой код на

tipd = order_daily.groupby(['UPC', 'date_expected']).sum().reindex(idx, fill_value=0).reset_index()
# Rearranging of columns to put UPC column first
tipd = tipd[['UPC','date_expected','quantity_picked']]
# Viewing first 10 rows to check format of dataframe
print('Preview of Total per Item per Day')
print(tipd.iloc[0:10])

И получите следующую ошибку:

TypeError: Argument 'tuples' has incorrect type (expected numpy.ndarray, got DatetimeArray)

Мне нужно, чтобы каждая дата была указана для каждого продукта, даже если выбранное количество равно нулю. Я планирую создать два новых столбца с использованием .shift и .diff для расчетов, и эти столбцы будут неточными, если мои данные будут пропускать даты.

Любое руководство очень ценится.

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