在数据框中用quantity_picked = 0填写日期(分组后两列丢失)

时间:2019-07-01 19:06:06

标签: python pandas dataframe datetime pandas-groupby

我正在使用UPC(产品编号),date_expected和quantity_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

我可以使用下面的代码以这种方式成功地组织数据,但是输出中没有显示数量为picted_picked = 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创建两个新列,如果我的数据跳过日期,这些列将不准确。

非常感谢任何指导。

0 个答案:

没有答案