以下是我的数据框的设置:
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
答案 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