改造我修修补补一些丑陋的代码来解决这个问题,但希望找到一个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