根据特定行中第二列的条件,使用另一行中同一列的值填充特定行的列中的值

2024-06-02 06:03:54 发布

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

我有一个代表零售链数据集的数据框。它有Item\u Identifier、Item\u Weight、Item\u MRP、Outlet\u Identifier列。列Item_Weight表示gms中特定项的权重,是数字,但缺少某些值。列项目\u权重缺少列出口\u标识符=OUT019或OUT027的项目的值。但是,与另一个出口标识(OUT019或OUT027除外)在不同行中的同一项目(由项目标识标识标识标识标识)具有项目权重,并且可以用于将缺少的项目权重替换为出口标识(OUT019或OUT027)。你知道吗

我已经写了下面的代码,但它似乎有一个问题。这不是最干净的方法:

items = df_train[df_train.Outlet_Identifier == "OUT019"]['Item_Identifier']
listItems = []
for i in items:
    u = df_train.query('(Item_Identifier == @i) & (Outlet_Identifier != 
         "OUT019") & (Outlet_Identifier != "OUT027")').head(1)
    if not u.empty:
        listItems.append(u.at[u.index[0],'Item_Weight'])

df_rep = pd.concat([items.reset_index(),pd.DataFrame(listItems)],axis=1)
df_rep.columns = ['row', 'Item_Identifier', 'Item_Weight']
for index, row in df_rep.iterrows():
    df_train.loc[df_train.Item_Identifier == row.Item_Identifier ]
                                      ['Item_Weight']= row['Item_Weight']

需要帮助。你知道吗


Tags: 项目dfindexitemstrainitem标识row
1条回答
网友
1楼 · 发布于 2024-06-02 06:03:54
df['Item_Weight'] = df.groupby(['Item_Identifier','Outlet_Identifier'])['Item_Weight'].ffill()
df['Item_Weight'] = df.groupby(['Item_Identifier','Outlet_Identifier'])['Item_Weight'].bfill()

这应该能解决你的问题。ffill()将查看接下来的所有行以查看是否有可用的内容,并将填充它,bfill()将查看前面的行以填充空值。你知道吗

相关问题 更多 >