[英]Pandas assign a column value basis previous row different column value
I have a df like this:我有一个这样的df:
and the resultDF I want needs to be like this:我想要的 resultDF 需要是这样的:
So except first row I want Supply value to be added with Available value of previous row and then subtract it with order value.因此,除了第一行之外,我希望将供应值与前一行的可用值相加,然后用订单值减去它。 Eg for row 3 in resultDF, Supply value (2306) is generated by adding Available value (145, row 2) from resultDF and Supply value (2161, row 3) from df.
例如,对于 resultDF 中的第 3 行,Supply 值 (2306) 是通过将来自 resultDF 的可用值(145,第 2 行)和来自 df 的 Supply 值(2161,第 3 行)相加来生成的。 And then simply Available value is calculated using Supply - Order.
然后使用供应 - 订单简单地计算可用价值。 Can anyone help me with how to generate resultDF.
任何人都可以帮助我如何生成 resultDF。
Use cumsum
:使用
cumsum
:
df["Available"] = df["Supply"].cumsum() - df["Order"].cumsum()
df["Supply"] = df["Available"] + df["Order"]
>>> df
product Month Order Supply Available
0 xx-xxx 202107 718 1531.0 813.0
1 None 202108 668 813.0 145.0
2 None 202109 5030 2306.0 -2724.0
3 None 202110 667 -2724.0 -3391.0
Use cumsum
to compute right values:使用
cumsum
计算正确的值:
Assuming:假设:
# Setup
data = {'Product': ['xx-xxx', 'xx-xxx', 'xx-xxx', 'xx-xxx'],
'Month': [202107, 202108, 202109, 202110],
'Order': [718, 668, 5030, 667],
'Supply': [1531, 0, 2161, 0],
'Available': [813, -668, -2869, -667]}
df = pd.DataFrame(data)
df[['Supply', 'Available']] = df.groupby('Product').apply(lambda x: \
pd.DataFrame({'Supply': x['Order'] + x['Supply'].cumsum() - x['Order'].cumsum(),
'Available': x['Supply'].cumsum() - x['Order'].cumsum()}))
Output: Output:
>>> df
Product Month Order Supply Available
0 xx-xxx 202107 718 1531 813
1 xx-xxx 202108 668 813 145
2 xx-xxx 202109 5030 2306 -2724
3 xx-xxx 202110 667 -2724 -3391
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.