我有一个熊猫数据框(用来说明预期的行为),如下所示:
df = pd.DataFrame({
'Id': ['001', '001', '002', '002'],
'Date': ['2013-01-07', '2013-01-14', '2013-01-07', '2013-01-14'],
'Purchase_Quantity': [12, 13, 10, 6],
'lead_time': [4, 2, 6, 4],
'Order_Quantity': [21, 34, 21, 13]
})
df['Date'] = pd.to_datetime(df['Date'])
df = df.groupby(['Id', 'Date']).agg({
'Purchase_Quantity': sum,
'lead_time': sum,
'Order_Quantity': sum})
Purchase_Quantity lead_time Order_Quantity
Id Date
001 2013-01-07 12 4 21
2013-01-14 13 2 34
002 2013-01-07 10 6 21
2013-01-14 6 4 13
其中lead_time
是以天为单位的持续时间。你知道吗
我想添加一个列来跟踪“现存量”,即:
预期结果应为:
Purchase_Quantity lead_time Order_Quantity OH
Id Date
001 2013-01-07 12 4 21 0
2013-01-14 13 2 34 9
002 2013-01-07 10 6 21 0
2013-01-14 6 4 13 11
我认为应该关注^{} 来构建新行(而不是迭代数据帧行)。你知道吗
这是第一次尝试。我将更新它,以更好地匹配您试图实现在您的编辑。你知道吗
编辑
我想我误解了你想要达到的目标。你知道吗
这是您的基本数据框:
据我所知,
On Hand
列必须报告尚未到达的“已购买”项目的数量。看这样的东西:我明白了吗?如果是,那么
Order_Quantity
是什么意思?你知道吗编辑2
这里有一个新的例子,很大程度上受到this post的启发,它似乎与您的用例相匹配。你知道吗
我更改了列名以避免混淆(在我的语言中,“Order”和“Purchase”翻译成同一个词有什么区别…)。 您还应该将提前期转换为
datetime.timedelta
对象,使单位和计算更加清晰。你知道吗如图所示,您可能需要分两步完成。首先构建一个新列,其值取决于行的当前值(请参阅链接的文章)。然后做其他可以矢量化的计算。你知道吗
这还不能提供预期的输出,但我认为这是一个很好的起点。你知道吗
相关问题 更多 >
编程相关推荐