繁体   English   中英

Python Pandas Dataframe 减去前一行和前一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM