avec exemple ci-dessous:pandas géants dataframe appliquer à l'aide des arguments supplémentaires
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]})
J'ai une fonction « fill_price » pour créer une nouvelle colonne « Price_B » basée sur « signal » et « prix ». Price_B est égal à Price si «signal» est 1. Price_B est égal à Price_B de la rangée précédente si le signal est 0. Si le sous-groupe commence par un «signal» 0, alors «price_B» sera maintenu à 0 jusqu'à ' signal » tourne 1.
Actuellement, j'ai:
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)
c'est ensuite appliquée à l'aide:
df['Price_B'] = fill_price(df,'signal','price')
Cependant, je veux utiliser df.groupby. ('produit') appliquer () pour appliquer cette fonction fill_price à deux sous-ensembles de colonnes 'product' séparément, et l'appliquer aussi bien à 'price' qu'à 'price' colonnes price2 '. Quelqu'un pourrait-il aider avec ça?
Je veux essentiellement faire:
df.groupby('product',groupby_keys=False).apply(fill_price, 'signal','price2')
Est-ce que cela fonctionne? 'df.groupby ('product'). apply (lambda x: fill_price (x, 'signal', 'prix'))' –