[英]Python Pandas Dataframe subtraction previous row and column
我正在尝试从数据框中的列中减去值我正在尝试这样做
for i in range(len(Numbers)-1):
sub = Numbers.loc[i, 'Stock'] - Numbers.loc[i, 'Sold Number']
Numbers.loc[i, 'PrepNumber'] = Numbers.loc[i+1, 'Stock'] - sub
但这不起作用,我收到此错误
numpy.core._exceptions.UFuncTypeError: ufunc 'subtract' did not contain a loop with signature matching types (dtype('int64'), dtype('<U4')) -> None
编辑:
我拥有的数据如下所示:
日期 | 库存 | 售出数量 |
---|---|---|
1 月 19 日 | 1255 | 1123 |
2 月 19 日 | 1089 | 1051 |
3 月 19 日 | 943 | 1146 |
4 月 19 日 | 897 | 992 |
我希望输出看起来像:
日期 | 库存 | 售出数量 | 准备编号 |
---|---|---|---|
1 月 19 日 | 1255 | 1123 | 957 |
2 月 19 日 | 1089 | 1051 | 905 |
3 月 19 日 | 943 | 1146 | 1100 |
4 月 19 日 | 897 | 992 |
其中 PrepNumber (Jan-19) = 1089 - (1255 - 1123)
您可以使用.shift(-1)
获取下一行的条目,并按如下格式设置公式以设置PrepNumber
列:
Numbers['PrepNumber'] = Numbers['Stock'].shift(-1) - (Numbers['Stock'] - Numbers['Sold Number'])
有了这个单行代码,Pandas 已经帮助您计算了每一行的结果,而无需将代码放入循环中。 这是 Pandas 提供的特性,你应该好好利用它,并尽可能避免循环编码。
结果:
print(Numbers)
Date Stock Sold Number PrepNumber
0 Jan-19 1255 1123 957.0
1 Feb-19 1089 1051 905.0
2 Mar-19 943 1146 1100.0
3 Apr-19 897 992 NaN
您的问题不清楚,如果您能提供示例数据和预期结果,或者解释您在未来的问题中尝试做的更多事情,那就太好了。
但是,如果您尝试相互添加或减去整列,并将结果保存在新列中,请尝试使用以下命令:
Numbers["PrepNumber"] = Numbers["Stock"] - Numbers["Sold Number"]
还有一个提示,使用 for 循环来迭代数据帧的记录超过了使用 Pandas 的全部目的,并且应该始终避免使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.