繁体   English   中英

从上一行访问值 pandas dataframe

[英]Access value from previous row pandas dataframe

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

我曾尝试使用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

为了更加清楚:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM