首页 > 解决方案 > 从上一行熊猫数据框中访问值

问题描述

我目前正在编写一些代码来获取库存数量,该代码取决于物品是先从某处移动还是先移动到某处。因此,我需要数据框中列的值,该值确定从上一行执行了哪些操作(库存计数、库存移动、使用的库存等)。

df.shift()正如我在回答另一个问题时看到的那样,我尝试过使用,但这会返回整个列。另外我需要它是一个字符串,我希望可以使用转换,str()但我还没有尝试过。

我当前的简化代码是:

if row['Action'] == "Move From":
    if str(df['Action'].shift(1)) == "Move To": # Have tried with and without 1 argument
        # Rest of code
        print('Shift worked')

示例 df 格式将类似于:

Stock Location, Action, Total Quantity, Location Quantity
A1, Stock Count, 500, 500
A1, Move From, 500, 250
A2, Move To, 500, 250
A2, Stock Count, 500, 250
A1, Stock Count, 500, 250

总数量永远不会因为库存移动而改变,但位置 A1 和 A2 的库存数量确实发生了变化。问题是Move To并不总是遵循Move From,有时它们是相反的。为了获得工厂数量,我总结了存储库存的所有位置的数量。我一直在创建一个Temp_Var等于正在移动的库存数量或相应的负数量,具体取决于库存是否从或者。但是,Temp_Var只有第一次移动才需要,如果库存已经移动,Temp_Var则不需要。

为了更加清楚:

使用上述数据框,在第 3 行期间,Total Quantity将等于 A2 行中的数量和临时变量中的额外 250(因为我们还不知道它移动到哪里),然后在第 4 行期间,Total Quantity将等于行中的数量A1 和 A2,不需要临时变量。因为有时Move To首先出现,只是通过检查'Action',我并不总是知道我是否需要一个临时变量。

实际上,尽管这背后的推理在很大程度上是多余的,并且使实际问题看起来比实际更令人困惑。我只需要能够检查上一行的值

标签: pythonpython-3.xpandas

解决方案


df['Action'].shift(1)创建一个新列,因此您需要在遍历数据框之前执行此操作,并为其分配一个新名称:

df['Previous Action'] = df['Action'].shift(1),然后在迭代期间引用新列。


推荐阅读