【问题标题】:Iterate over rows and subtract values in pandas df迭代行并减去pandas df中的值
【发布时间】:2022-01-12 14:26:08
【问题描述】:

我有下表:

ID Qty_1 Qty_2
A 1 10
A 2 0
A 3 0
B 3 29
B 2 0
B 1 0

我想根据 ID 进行迭代,减去 Qty_2 - Qty_1 并使用该结果更新下一行。

结果是:

ID Qty_1 Qty_2
A 1 10
A 2 8
A 3 5
B 3 29
B 2 27
B 1 26

理想情况下,我还想从第一行末尾减去一个新 ID 开始,然后才开始循环:

ID Qty_1 Qty_2
A 1 9
A 2 7
A 3 4
B 3 26
B 2 24
B 1 23

每个解决方案都可以!谢谢!

【问题讨论】:

  • 既然 SO 不是一个代码编写网站,你做了什么尝试,做了什么研究?
  • 我设法到达该表,并使用索引将 Qty_2 替换为 0,并将每个 ID 的第一行保留为 Qty >0。现在,我想尝试在 ID 相同的情况下减去 Qty_2(第 i 行)-Qty_1(i+1 行)。可能是一个while循环?
  • 请使用您当前的代码创建minimal reproducible example,另请参阅How to Ask

标签: pandas loops


【解决方案1】:

先逐行计算'Qty_1'和'Qty_2'的差值,然后按'ID'分组,计算累加和:

df['Qty_2'] = df.assign(Qty_2=df['Qty_2'].sub(df['Qty_1'])) \
                .groupby('ID')['Qty_2'].cumsum()
print(df)

# Output:
  ID  Qty_1  Qty_2
0  A      1      9
1  A      2      7
2  A      3      4
3  B      3     26
4  B      2     24
5  B      1     23

设置:

data = {'ID': ['A', 'A', 'A', 'B', 'B', 'B'],
        'Qty_1': [1, 2, 3, 3, 2, 1],
        'Qty_2': [10, 0, 0, 29, 0, 0]}
df = pd.DataFrame(data)

【讨论】:

  • 传奇!谢谢
猜你喜欢
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2020-01-25
  • 2023-03-31
  • 2018-10-12
  • 2022-12-14
  • 1970-01-01
相关资源
最近更新 更多