在datafram中填写日期(groupby后缺少两列),数量为0

2024-04-25 00:30:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用UPC(产品#)、预期日期#和提货数量#列,需要整理数据以显示每个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

当我试着遵循以下给出的解决方案时: Pandas filling missing dates and values within group 我将代码调整为

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创建两个新列用于计算,如果我的数据跳过日期,这些列将不准确。你知道吗

非常感谢您的指导。你知道吗


Tags: ofto数据数量dateindexorderquantity