Je bricolé des codes laids pour faire face à cela, mais voulait trouver un moyen pythonique:pandas géants avec des conditions
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],'price_B':[1,1,1,4,4,4,4,0,2,2,2,5,5,5,]})
Je veux créer la colonne « Price_B ». Price_B est égal à Price si «signal» est 1. Price_B est égal au prix de la ligne 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.
Voici ce que je l'ai écrit:
dfb = df.groupby('product').get_group('B')
for i in dfb.index:
if dfb.loc[i, 'signal'] == 1:
dfb.loc[i, 'test'] = dfb.loc[i, 'price']
else:
try:
dfb.loc[i, 'test'] = dfb.loc[i - 1, 'test']
except KeyError:
dfb.loc[i, 'test'] = 0
Je sais que ces codes ne sont pas légales. Quelqu'un peut-il aider?
Votre code dans la boucle 'for' n'est pas correctement indenté. – IanS
oh oui. Tout juste mis à jour la boucle for –
Utilisez .loc() Liste de la compréhension comme dans ma réponse ci-dessous – 2Obe