Python 同时迭代和更新数据帧

Python 同时迭代和更新数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个包含级别、产品ID和成本的数据框。 此处级别1表示它是一个主产品,级别2表示它是一个子产品,级别进一步提高表示子产品的多个子产品 Level Product ID Cost 0 1 111 12 1 1 112 15 . . . 25 1 294 32 我需要在上面的数据框上迭代,并在数据库中搜索是否有任何具有特定产品ID的产品具有子产品。例如,具有

我有一个包含
级别、产品ID和成本的数据框。
此处
级别1
表示它是一个主产品,
级别2
表示它是一个子产品,级别进一步提高表示子产品的多个子产品

    Level    Product ID    Cost
0   1         111           12
1   1         112           15
.
.
.
25  1         294           32
我需要在上面的数据框上迭代,并在数据库中搜索是否有任何具有特定产品ID的产品具有子产品。例如,具有产品ID 112的产品可以具有具有产品ID 1121和1122的2个子产品。然后我需要在我的数据框架中添加这两个子产品

注意:产品ID可以是任何数字或字符串。它不必是其基本产品id的倍数

这里的另一个条件是子产品可以有更多的子产品。例如,子产品1122可以有3个子产品11221、11222、11223

此外,如果一个产品有子产品,那么该产品的成本应该等于其所有子产品的成本之和

最后的数据帧必须如下所示

    Level    Product ID    Cost
0   1        111           12
1   1        112           15
2   2        1121          8
3   2        1122          7
4   3        11221         2
5   3        11222         3
6   3        11223         2
.
.
.
27  1        294           32
有人能帮我解决这个问题吗。下面是我尝试的代码

for i, _ in multi_bom_df.iterrows():
        if i == 0:
            multi_bom_df.at[i, 'Level'] = '1'
        else:
            multi_bom_df.at[i, 'Level'] = str(current_level)
            base_part_number = str(multi_bom_df.loc[i]['Name'])
            sub_assemblies = models.MultiLevel.objects.filter(base_part=base_part)
            if sub_assemblies.exists():
                current_level += 1
                for index, record in enumerate(sub_assemblies):
                    sub_index = i + (index + 1) / 10
                    multi_bom_df.at[sub_index, 'Level'] = current_level
                    multi_bom_df.at[sub_index, 'Product ID'] = record.sub_assembly_product_id
                    multi_bom_df.at[sub_index, 'Cost'] = record.cost
                multi_bom_df.index = multi_bom_df.index.astype(float)
                multi_bom_df = multi_bom_df.sort_index()```


这是类似的说明。获取产品ID并将其转换为字符串。将产品ID的字符1放入其自己的“pid1”列中,对第二个字符“pid2”和第三个字符“pid3”以及“pid4”(N-1列)执行相同的操作

这将为您提供所有4级内容(5级内容的总和)

这会让你得到所有的3级的东西


注意:这是一种糟糕的格式,因为它假设您只拥有这些东西。请提供一个最小且可复制的代码示例?stackoverflow.com/help/minimal-repeatable-example这里有很多未知因素-格式化您的问题并添加完整的逻辑。基本的解决方案很简单-在每一个级别上,对级别2应用*10的倍数,对级别3应用*100的倍数,然后使用
groupby
add
&
cumcount
@datanovel请根据我尝试过的代码详细说明您的答案。
df.groupby(['pid1','pid2','pid3','pid4']).agg({'cost':'sum'})
df.groupby(['pid1','pid2','pid3']).agg({'cost':'sum'})