假设我有以下 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')
- 我首先从容器中删除数量,因为您不需要它 - 我们将从库存中创建它。
- 然后,我们按容器代码对库存进行分组,以汇总与每个容器相关的数量。
- 然后,我们执行两者之间的连接,容器中存在的每个容器代码都会收到库存中的总数量
关于python - 如何根据另一个DataFrame中的值更新DataFrame中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788531/