【发布时间】:2018-01-08 19:02:36
【问题描述】:
下面的例子:
df = pd.DataFrame({'signal':[1,0,0,1,0,0,0,0,1,0,0,1,0,0],'product':['A','A','A','A','A','A','A','B','B','B','B','B','B','B'],'price':[1,2,3,4,5,6,7,1,2,3,4,5,6,7],'price2':[1,2,1,2,1,2,1,2,1,2,1,2,1,2]})
我有一个函数“fill_price”来创建一个基于“信号”和“价格”的新列“Price_B”。对于每个“产品”子组,如果“信号”为 1,Price_B 等于价格。如果信号为 0,Price_B 等于前一行的 Price_B。如果子组以 0“信号”开头,则“价格_B”将保持为 0,直到信号'变成1。
目前我有:
def fill_price(df, signal,price_A):
p = df[price_A].where(df[signal] == 1)
return p.ffill().fillna(0).astype(df[price_A].dtype)
然后使用:
df['Price_B'] = fill_price(df,'signal','price')
但是,我想使用 df.groupby('product').apply() 将此 fill_price 函数分别应用于“product”列的两个子集,并将其应用于“price”和“price2”列.有人可以帮忙吗?
我基本上是想做的:
df.groupby('product',groupby_keys=False).apply(fill_price, 'signal','price2')
【问题讨论】:
-
这行得通吗?
df.groupby('product').apply(lambda x: fill_price(x,'signal','price'))
标签: python pandas group-by apply