根据条件减去列中的值

时间:2018-02-23 19:33:15

标签: python pandas

以下是我的数据框的设置:

import pandas as pd

a=pd.DataFrame([[101,'RK',1,'01','A',200],[101,'FET01',1,'02','B',10],
                [101,'CS',1,'01','C',300],[101,'AS',1,'03','D',250],
                [101,'FET02',1,'04','E',15],[102,'DG',1,'05','F',200],
                [103,'GH',3,'06','G',150],[103,'FET01',3,'08','H',12]],
                columns=['Inv','Item','Order','Warehouse','Module','Amt'])

输出:

     Inv    Item    Order   Warehouse   Module    Amt
0   101      RK       1       01          A       200
1   101    FET01      1       02          B       10
2   101      CS       1       01          C       300
3   101      AS       1       03          D       250
4   101    FET02      1       04          E       15
5   102      DG       1       05          F       200
6   103      GH       3       06          G       150
7   103    FET01      3       08          H       12

我希望从其相应的 FET Amt 减去<{1}} Item Amt。对于eq,由于第一行中的Item RK 下方有Item FET01 ,因此 RK 的Amt应为改为(200-10)。在第3行中,Item CS 下方没有 FET Amt不应更改。在第四行中,Item AS 下方有 FET ,应从其中删除Amt FET < / em>这是(250-15)。

最终输出应为:

    Inv    Item    Order   Warehouse   Module    Amt
0   101      RK       1       01          A       190
1   101    FET01      1       02          B       10
2   101      CS       1       01          C       300
3   101      AS       1       03          D       235
4   101    FET02      1       04          E       15
5   102      DG       1       05          F       200
6   103      GH       3       06          G       138
7   103    FET01      3       08          H       12

1 个答案:

答案 0 :(得分:1)

您可以通过简单地遍历数据框,检查下一行中“项目”的值,并减去它是否包含“FET”来实现此目的:

for ii, row in a.iterrows():
    if ii+1 >= len(a):
        break
    if 'FET' in a.iloc[ii+1]['Item']:
        a.set_value( ii, 'Amt', a.iloc[ii]['Amt']-a.iloc[ii+1]['Amt'] )

print a