更新字段

2024-10-03 15:31:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个随机的给你们: 我有一张有4个字段的表 产品代码,位置代码,主要,库存位置

有些productcodes在表中只有1个条目,有些productcodes有2个条目,其中1应该是主位置,而另一个不应该(主位置是1或0)

例如:
产品代码     位置代码     主要的,重要的     库存位置
基础知识                       1                       1                       5
密件抄送                       2                       1                       3
CDE公司                       三                       1                       5
CDE公司                       5                       0                       22
定义                        4                        1                        7
定义                       7                       0                      10
EFG公司                       6                      1                       5

我要做的是将“Primary”字段重置为1,其中stockinlocation是最高的,或者表中只有1个条目,而所有其他Primary的应该是0

到目前为止,我的第一个问题是 更新plocate a 设置“Primary”=“0”

现在,我需要第二个查询,它将根据上述规则正确设置主字段,从而生成下表:
产品代码     位置代码     主要的,重要的     库存位置
基础知识                       1                       1                       5
密件抄送                       2                       1                       3
CDE公司                       三                       0                       5
CDE公司                       5                       1                       22
定义                        4                        0                        7
定义                       7                       1                      10
EFG公司                       6                      1                       5

不幸的是,这让我很困惑,因为我不知道如何只更新表中只有1个条目的行(如产品ABC、BCD、EFG)和库存最多的行(如第2行CDE和第2行DEF)。有人吗


Tags: 代码定义产品库存公司条目重置基础知识
1条回答
网友
1楼 · 发布于 2024-10-03 15:31:57

我不能回答你正在使用的具体软件,但我有一个通用的算法,你应该能够翻译?我使用了pandas,任何像样的数据库都应该有相同类型的功能

设置测试数据:

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

相关问题 更多 >