改造我修修補補一些醜陋的代碼來解決這個問題,但希望找到一個Python的方式:熊貓橫行的條件
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,]})
我要創建「Price_B」列。對於每個「產品」子組,如果信號爲1,則Price_B等於Price。如果信號爲0,則Price_B等於前一行的價格。如果子組以「0」信號開始,則'price_B'將保持爲0直到'信號」變成1
下面是我寫的:
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
我知道這些代碼是不合法的。有人可以幫忙嗎?
您在for循環中的代碼沒有正確縮進。 – IanS
哦,是的。剛剛更新了for循環 –
使用.loc()列表理解喜歡在我的回答下面 – 2Obe