gebastelt ich einige hässliche Codes damit umgehen, aber wollte einen pythonic Weg, um herauszufinden:Pandas zeilenweise Transformation mit Bedingungen
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,]})
ich die ‚Price_B‘ Spalte erstellen möchten. Für jede Untergruppe 'Produkt' ist Price_B gleich Price, wenn 'Signal' 1 ist. Price_B ist gleich dem Preis der vorherigen Zeile, wenn das Signal 0 ist. Wenn die Untergruppe mit einem 0 'Signal' beginnt, wird 'price_B' auf 0 gehalten. ‚Signal schaltet 1.
Hier sind, was ich schrieb:
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
ich weiß, dass diese Codes sind nicht legal. Kann jemand helfen?
Ihr Code in der for-Schleife ist nicht richtig eingerückt. – IanS
oh ja. Just updated die for-Schleife –
Verwenden .loc() List Verständnis wie in meiner Antwort unter – 2Obe