如何用pandas-python递归地构造一列数据帧?

如何用pandas-python递归地构造一列数据帧?,第1张

概述给出这样一个数据框df:id_ val 11111 12 12003 22 88763 19 43721 77 ... 我希望为df添加一个列diff,并且它的每一行等于,比方说,该行中的val减去前一行中的diff并乘以0.4然后在前一天添加diff:diff = (val - diff_previousDay)

给出这样一个数据框df:

ID_      val     11111    1212003    2288763    1943721    77...

我希望为df添加一个列diff,并且它的每一行等于,比方说,该行中的val减去前一行中的diff并乘以0.4然后在前一天添加diff:

diff = (val - diff_prevIoUsDay) * 0.4 + diff_prevIoUsDay

并且第一行中的差异等于该行中的val * 4.也就是说,预期的df应该是:

ID_      val     diff   11111    12      4.812003    22      11.6888763    19      14.60843721    77      ...

我试过了:

mul = 0.4df['diff'] = df.apply(lambda row: (row['val'] - df.loc[row.name,'diff']) * mul + df.loc[row.name,'diff'] if int(row.name) > 0 else row['val'] * mul,axis=1) 

但得到如错误:

TypeError: (“unsupported operand type(s) for -: ‘float’ and ‘nonetype'”,‘occurred at index 1’)

你知道如何解决这个问题吗?先感谢您!最佳答案您可以使用:

df.loc[0,'diff'] = df.loc[0,'val'] * 0.4for i in range(1,len(df)):    df.loc[i,'diff'] = (df.loc[i,'val'] - df.loc[i-1,'diff']) * 0.4  + df.loc[i-1,'diff']print (df)     ID_  val     diff0  11111   12   4.80001  12003   22  11.68002  88763   19  14.60803  43721   77  39.5648

输入取决于先前步骤的结果的计算的迭代性质使矢量化复杂化.你也许可以使用apply和一个与循环执行相同计算的函数,但在幕后这也是一个循环. 总结

以上是内存溢出为你收集整理的如何用pandas-python递归构造一列数据帧?全部内容,希望文章能够帮你解决如何用pandas-python递归地构造一列数据帧?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存