如何在Pandas中跨索引计算DOH列:Inventory除以+1索引的OUT
跨索引实现DataFrame列除法的正确方法
针对你需要将Inventory列与OUT列进行跨索引除法的需求,以下是两种对应不同业务逻辑的正确实现方式:
场景1:当前行Inventory除以下一行OUT
如果需求是DOH[i] = Inventory[i] / OUT[i+1](比如索引0的DOH用Inventory[0]除以索引1的OUT),可以使用shift(-1)将OUT列向上平移一位,再执行除法:
df['DOH'] = df['Inventory'].div(df['OUT'].shift(-1))
场景2:上一行Inventory除以当前行OUT
如果需求是DOH[i] = Inventory[i-1] / OUT[i](即你例子中索引1的DOH用Inventory[0]除以OUT[1]),则使用shift(1)将Inventory列向下平移一位,再与OUT列做除法:
df['DOH'] = df['Inventory'].shift(1).div(df['OUT'])
代码说明
shift(n)方法用于将列数据按索引方向平移:shift(1)表示向下移动一行(当前行取上一行的值),shift(-1)表示向上移动一行(当前行取下一行的值)div()方法是DataFrame的除法方法,会自动按索引对齐进行计算
关于你之前的错误代码
- 第一段代码
df['DOH']=df['Inventory'].div(df['OUT'])确实是同索引计算,不符合跨索引需求 - 第二段代码
df['DOH']=df['Inventory'].div(df.iloc['OUT '+1:])执行失败的原因是iloc接收的是整数位置索引,不能用字符串拼接的方式获取列,正确的列索引应该用df['OUT'],再结合shift实现平移
内容的提问来源于stack exchange,提问作者Sattai
相关产品推荐
相关产品推荐

