我正在使用一个包含列UPC、date_expected和quantity picked的数据框架。(每个订单一行,一天内包含相同UPC的多个订单),但也不列出每个UPC的每个日期,只列出挑库数量大于0的日期。目标:组织一个按UPC显示quantity_picked,然后按date_expected显示quantity_picked的结构,列出从2019年5月14日到当前的每个日期,即使quantity_picked = 0(显示quantity_picked = 0的行未包含在原始数据源中)。
MFC_order_daily['date_expected'] = pd.to_datetime(MFC_order_daily['date_expected'], format='%Y-%m-%d')
print('Daily Pick Data:')
print(MFC_order_daily)
字符串
数据以这种格式出现:
Daily Pick Data:
UPC quantity_picked date_expected
0 0001111041660 1.0 2019-05-14
1 0001111045045 1.0 2019-05-14
... ... ...
39694 0004470036000 6.0 2019-06-24
39695 0007225001116 1.0 2019-06-24
[39696 rows x 3 columns]
型
尝试使用groupby和reset_index进行组织,如下所示,但收到以下缺少日期的序列号,其中quantity_picked=0:
tipd = MFC_order_daily.groupby(['UPC', 'date_expected']).sum().reset_index()
tipd = tipd[['UPC','date_expected','quantity_picked']]
print(tipd)
UPC date_expected quantity_picked
0 0000000002554 2019-05-14 4.0
1 0001111041660 2019-05-14 2.0
2 0001111041660 2019-05-16 2.0
3 0004470036000 2019-05-14 3.0
4 0004470036000 2019-05-16 1.0
的字符串
然后尝试创建一个交叉表来获取零值,并使用stack或melt进行整形。成功创建并生成交叉表:
tipd2 = pd.crosstab([MFC_order_daily["UPC"]], MFC_order_daily["date_expected"])
print(tipd2)
date_expected 2019-05-14 2019-05-15 ... 2019-06-23 2019-06-24
UPC ...
0000000002554 0 0 ... 0 0
0000000003082 0 1 ... 2 3
0000000003107 1 0 ... 2 2
... ... ... ... ...
0360600051715 0 0 ... 0 0
0501072452748 0 0 ... 0 0
0880100551750 0 0 ... 0 0
[8302 rows x 42 columns]
的字符串
尝试堆叠:
tipd2.stack('date_expected')
print('Stacked tipd2:')
print(tipd2)
型
结果数据与上图交叉表相同,没有变化,没有错误。
尝试熔化:
tipd2.melt(id_vars=['UPC', 'date_expected'])
型
产生的错误:
KeyError: "The following 'id_vars' are not present in the DataFrame: ['UPC', 'date_expected']"
型
期望输出:
UPC date_expected quantity_picked
0 0000000002554 2019-05-14 4.0
1 0000000002554 2019-05-15 0.0
2 0000000002554 2019-05-16 0.0
3 0001111041660 2019-05-14 2.0
4 0001111041660 2019-05-15 0.0
5 0001111041660 2019-05-16 2.0
6 0004470036000 2019-05-14 3.0
7 0004470036000 2019-05-15 0.0
8 0004470036000 2019-05-16 1.0
型
从5/14/19开始循环每个UPC的每个日期。
2条答案
按热度按时间o2rvlv0m1#
IIUC,您可以使用
pivot
和stack
:字符串
输出量:
型
如果你也想填写日期,那么你可能想看看
reindex
。mctunoxg2#
pd.melt
中的ignore_index=False
参数适用于这种情况演示代码:
字符串
DF_字母是
型
然后计算交叉表
型
DF_Cross:
型
然后你可以用
ignore_index=False
参数来调用pd.melt
函数来重新塑造这个框架型
输出头:
型
也可以先添加索引列,然后将
id_vars
参数传递给pd.melt
型
输出负责人:
型