gpt4 book ai didi

python - 如何根据另一个DataFrame中的值更新DataFrame中的值?

转载 作者:行者123 更新时间:2023-12-01 04:58:44 27 4
gpt4 key购买 nike

假设我有以下 DataFrame:

容器:

Key ContainerCode       Quantity
1 P-A1-2097-05-B01 0
2 P-A1-1073-13-B04 0
3 P-A1-2024-09-H05 0
5 P-A1-2018-08-C05 0
6 P-A1-2089-03-C08 0
7 P-A1-3033-16-H07 0
8 P-A1-3035-18-C02 0
9 P-A1-4008-09-G01 0

库存:

Key SKU     ContainerCode       Quantity
1 22-3-1 P-A1-4008-09-G01 1
2 2132-12 P-A1-3033-16-H07 55
3 222-12 P-A1-4008-09-G01 3
4 4561-3 P-A1-3083-12-H01 126

如何根据库存中的信息更新容器中的数量值以反射(reflect)每个容器中的单位数量?请注意,多个 SKU 可以驻留在单个 ContainerCode 中,因此我们需要添加数量,而不仅仅是替换它,并且特定 ContainerCode 的 Containers 中可能有多个条目。

实现这一目标的可能方法有哪些,它们的相对优缺点是什么?

编辑

以下代码似乎是一个很好的测试用例:

import itertools
import pandas as pd
import numpy as np

inventory = pd.DataFrame({'Container Code':['A1','A2','A2','A4'],
'Quantity':[10,87,2,44],
'SKU':['123-456','234-567','345-678','456-567']})

containers = pd.DataFrame({'Container Code':['A1','A2','A3','A4'],
'Quantity':[2,0,8,4],
'Path Order':[1,2,3,4]})

summedInventory = inventory.groupby('Container Code')['Quantity'].sum()

print('Containers Data Frame')
print(containers)
print('\nInventory Data Frame')
print(inventory)
print('\nSummed Inventory List')
print(summedInventory)
print('\n')

newContainers = containers.drop('Quantity', axis=1). \
join(inventory.groupby('Container Code').sum(), on='Container Code')
print(newContainers)

这似乎产生了所需的输出。

我还尝试使用常规合并:

pd.merge(containers.drop('Quantity', axis=1), \
summedInventory,how='inner',left_on='Container Code', right_index=True)

但这会产生“IndexError:列表索引超出范围”

有什么想法吗?

最佳答案

我希望我正确理解了您的情况。我认为你可以使用:

containers.drop('Quantity', axis = 1).\
join(inventory.groupby('ContainerCode').sum(), \
on = 'ContainerCode')
  1. 我首先从容器中删除数量,因为您不需要它 - 我们将从库存中创建它。
  2. 然后,我们按容器代码对库存进行分组,以汇总与每个容器相关的数量。
  3. 然后,我们执行两者之间的连接,容器中存在的每个容器代码都会收到库存中的总数量

关于python - 如何根据另一个DataFrame中的值更新DataFrame中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com