Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 复制行以为基于日期的合并准备数据帧_Python_Pandas_Dataframe_Merge - Fatal编程技术网

Python 复制行以为基于日期的合并准备数据帧

Python 复制行以为基于日期的合并准备数据帧,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,我有一个包含数百万行项目/组的数据库,称为项目: 我需要准备要与一个名为forecast的df合并的项目,该df如下所示: Item Group Month Forecast 0001 A 5 15 0001 A 6 16 0001 A 7 13 0002 A 5 60 0002 A 7 65 Item Group Month 0001 A 5 0001 A 6

我有一个包含数百万行项目/组的数据库,称为项目:

我需要准备要与一个名为forecast的df合并的项目,该df如下所示:

Item  Group  Month Forecast
0001  A      5     15
0001  A      6     16
0001  A      7     13
0002  A      5     60
0002  A      7     65
Item  Group  Month
0001  A      5
0001  A      6
0001  A      7
0002  A      5
0002  A      6
0002  A      7
...
我的合并将类似于: items.mergeforecast,on=['Item','Group','Month']

所以我的问题是准备项目,使其看起来像这样:

Item  Group  Month Forecast
0001  A      5     15
0001  A      6     16
0001  A      7     13
0002  A      5     60
0002  A      7     65
Item  Group  Month
0001  A      5
0001  A      6
0001  A      7
0002  A      5
0002  A      6
0002  A      7
...
因此,对于给定的一组月份,例如5、6、7,每个项目/组组合都有lenmonths行,无论是否有预测 预测中该项目/组/月份的数据

需要保留订单,例如,给定项目/行的三个月需要分组在一起,而不是仅附加到末尾的副本,并且项目需要保持有序

到目前为止,我一直在寻找堆栈作为一种可能的选择,但除了循环通过df,在我去的时候将第*2行附加到一个新的空df之外,我还没有得到任何工作,这看起来效率非常低

正确的方法是什么?

尝试外部合并

pd.merge(items, forecast, on=['Item', 'Group'], how='outer')

如果没有,请尝试此页面以获得更多灵感:

从以下数据框开始,在列项和组未设置为索引的情况下,我有以下内容:

   Item Group
0  0001     A
1  0002     A
2  0003     B
3  0004     A

items_mod = pd.DataFrame()
for i in [5, 6, 7]:
    items['Month'] = i
    items_mod = items_mod.append(items)
items_mod = items_mod.sort_values('Item')
这为我提供了以下数据帧:

   Item Group  Month
0  0001     A      5
0  0001     A      6
0  0001     A      7
1  0002     A      5
1  0002     A      6
1  0002     A      7
2  0003     B      5
2  0003     B      6
2  0003     B      7
3  0004     A      5
3  0004     A      6
3  0004     A      7

合并将包含哪些新信息?没有预测的项目/组/月份的NaN?@Charlie Yes。但是我简化了数据帧。items和forecast还有其他列,因此真正的目标是将forecast中的“forecast”信息带到items中,并为所有缺少的forecast创建NAN。此外,项目是预测的超集,因此直接在预测上执行op不会为所有项目创建它。这并不能解决在项目中创建包含所有可能项目/组/月组合的合理月份列的问题。这是这里的问题,而不是一旦合并完成后如何合并。如果我做得正确,应该在合并中添加月份……我认为。我更新了答案以删除“月”键。转到链接中的外部合并,看看这是否符合您的要求。这基本上就是我最终得到的结果。唯一的问题是,它没有保留项目的原始顺序,它们在实际DF中实际上没有排序顺序。为了解决这个问题,我只是将索引保留为一列,然后根据它进行排序。不知道为什么我认为它比这更复杂。这是我想象中的巧妙答案!我想我会坚持另一个,尽管它可能效率较低,但b/c更明确地说明发生了什么。@SeanKramer这当然是你的选择。。。希望这仍然有用:-当然有用!repeat和assign函数都是我以前没有遇到过的,我可能已经使用过很多次了。
forecast.merge(items_)

   Item Group  Month  Forecast
0     1     A      5        15
1     1     A      6        16
2     1     A      7        13
3     2     A      5        60
4     2     A      7        65