簡體   English   中英

根據Pandas中第二列的條件,用另一行的同一列的值填充特定行的列中的值

[英]Fill values in a column of a particular row with the value of same column from another row based on a condition on second column in Pandas

我有一個Dataframe代表零售鏈數據集。 它具有列Item_Identifier,Item_Weight,Item_MRP,Outlet_Identifier。 Item_Weight列代表特定項目的重量(以gms為單位),為數字,具有某些缺失值。 列Outlet_Identifier = OUT019或OUT027的Item列的Item_Weight缺少值。 但是,在不同行中具有另一個Outlet_Identifier(OUT019或OUT027除外)的同一行中的同一Item(由Item_Identifier標識)具有Item_Weight,可用於將缺少的Item_Weight替換為Outlet_Identifier(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']

需要一些幫助。

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()將查看前幾行以填充空值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM