【问题标题】:Iterating rows in Python在 Python 中迭代行
【发布时间】:2018-10-28 22:40:49
【问题描述】:

我想首先遍历项目编号,然后对于特定项目,我需要遍历周编号。主要目的是标记每个增加库存的项目的周数。我是新手,所以我不知道如何进行双重迭代。

输出将是这样的。当本周的库存大于前一周时,该标志变为 1。

【问题讨论】:

  • 您是否需要在for 循环内使用for 循环?
  • 到目前为止你尝试过什么?给我们任何东西.....
  • 你在用熊猫吗?或者那是一个列表列表
  • 您的数据是如何导入的?请注意,图像不如真正的文本结构与您用于导入以了解您的情况的代码 sn-p 结合起来有用
  • @SKSingh 如果您能告诉我们您的数据是如何呈现的,我们可以为您提供帮助

标签: python pandas loops dataframe iteration


【解决方案1】:

IIUC:您可以尝试在dataframe 中使用.groupby 项目编号后跟.shift,如下所示。

假设原始数据框如下:

   DIV_NBR  itm_nbr  WEEK_NO  DISTINCT_ITM_CNT  INVENTORY_IN_HAND
0       18    65874   201511               5.0             2925.0
1       18    65874   201512               5.0             2910.0
2       18    65874   201513               5.0             2961.0
3       19    65875   201511               5.0             2965.0
4       19    65875   201512               5.0             2971.0

然后:

# keep record of last week by grouping by item number and then using shift
df['LAST_WEEK'] = df.groupby('itm_nbr')['INVENTORY_IN_HAND'].shift()

# check if current inventory is greater than last week
df['Flag'] = (df['INVENTORY_IN_HAND'] - df['LAST_WEEK'])>0

# delete additional column
del df['LAST_WEEK']

# change flag int
df['Flag'] = df['Flag'].astype(int)

print(df)

结果:

   DIV_NBR  itm_nbr  WEEK_NO  DISTINCT_ITM_CNT  INVENTORY_IN_HAND  Flag
0       18    65874   201511               5.0             2925.0     0
1       18    65874   201512               5.0             2910.0     0
2       18    65874   201513               5.0             2961.0     1
3       19    65875   201511               5.0             2965.0     0
4       19    65875   201512               5.0             2971.0     1

【讨论】:

  • 这或多或少正是我所描述的方式。但是恕我直言,而不是 shift() 和手动减去只是使用 diff() 这样做会更直接。
  • 我不确定,但我认为有人可能会想出有效的方法。
猜你喜欢
  • 2020-07-31
  • 2018-09-26
  • 1970-01-01
  • 2015-08-24
  • 2013-06-20
  • 1970-01-01
  • 2014-07-19
  • 2012-02-17
相关资源
最近更新 更多