首页 > 解决方案 > 合并 groupby ffill 然后 bfill 的代码

问题描述

在下面的代码中,我想ffill按照代码bfill来做item_name

import pandas as pd
import numpy as np
df=pd.DataFrame({"date":['1/1/2021','1/2/2021','1/3/2021','1/4/2021','1/5/2021','1/1/2021','1/2/2021','1/3/2021','1/4/2021','1/5/2021'],
                 "item_name":["bracelet","bracelet","bracelet","bracelet","bracelet","earring","earring","earring","earring","earring"],
                 "quantity_sold":[np.nan,np.nan,3,4,np.nan,100,200,300,400,500]})
df['date']=pd.to_datetime(df['date'])
display(df)
#sort on the right fields before the calculation
df=df.sort_values(['item_name','date'])
#sum of quantity for last 3 days (curr_day-2,curr_day-1,curr_day)
df['quantity_sold']=df.groupby("item_name")['quantity_sold'].ffill()
df['quantity_sold']=df.groupby("item_name")['quantity_sold'].bfill()
df

原表: 在此处输入图像描述

ffill 然后 bfill 之后的表: 在此处输入图像描述

问题是,有没有办法将以下代码从两行组合成一行?

df['quantity_sold']=df.groupby("item_name")['quantity_sold'].ffill()
df['quantity_sold']=df.groupby("item_name")['quantity_sold'].bfill()

标签: pandas

解决方案


而不是在两行单独的行中写这个: -

df['quantity_sold']=df.groupby("item_name")['quantity_sold'].ffill()
df['quantity_sold']=df.groupby("item_name")['quantity_sold'].bfill()

通过链接方法将其写在一行中:-

df['quantity_sold']=df.groupby("item_name")['quantity_sold'].ffill().bfill()

推荐阅读