我有一个随机的给你们: 我有一张桌子有4个字段 ProductCode,LocationCode,Primary,StockInLocation
某些产品代码在表中只有1个条目,其他产品代码有2个,其中1应该是主要位置,而其他则不应该(主要是1或0)
例如:
产品代码位置代码主要库存StockInLocation
``ABC''的第1篇第1篇第5篇
BCD的版本2的版本1的版本3
CDE的版本3的版本1的版本1
CDE 5 5
DEF的版本4的版本1的版本7的版本
DEF国防部7国防部0 0
EFG的主题6的主题1的主题
我想做的是将“主要”字段重置为1,其中库存分配最高,或者表中只有1个条目,所有其他主要的字段应为0
到目前为止,我第一个查询为 更新配置 设置a。“ Primary” ='0'
现在我需要第二个查询,它将根据上述规则正确设置主字段,结果如下表所示:
产品代码位置代码主要库存StockInLocation
``ABC''的第1篇第1篇第5篇
BCD的版本2的版本1的版本3
CDE的版本3的版本0的版本CDE 3的版本5
CDE 5 5
国防军4国防军0 0
DEF 7 7
EFG的主题6的主题1的主题1的主题
不幸的是,这让我很困惑,因为我无法弄清楚如何仅更新表中只有1个条目的行(例如,产品ABC,BCD,EFG)以及库存最多的行(例如,CDE的第二行和DEF的第二行)。理论有人吗?
答案 0 :(得分:0)
对于您使用的特定软件,我无法回答,但是我有一个通用的算法,您应该可以翻译?我使用了熊猫,任何体面的数据库都应具有相同的功能类型。
设置测试数据:
import pandas as pd
df = pd.DataFrame({
"ProductCode" : ["ABC","BCD", "CDE", "CDE", "DEF", "DEF", "EFG"],
"LocationCode" : [1, 2, 3, 5, 4, 7, 6],
"Primary" : [1, 1, 1, 0, 1, 0, 1],
"StockInLocation" : [5, 3, 5, 22, 7, 10, 5]})
定义一个功能,该功能可在给定产品代码的各个位置输出最大库存:
max_stock = lambda x : df.loc[df["ProductCode"] == x, "StockInLocation"].max()
将Primary
列设置为零:
df["Primary"] = [0]*len(df)
遍历唯一的ProductCode
值列表,并将Primary
设置为1,其中StockInLocation
是该ProductCode
的最大值:
for x in df["ProductCode"].unique():
df.loc[(df["ProductCode"] == x) & (df["StockInLocation"] == max_stock(x)), "Primary"] = 1