【问题标题】:python pandas use previous calculated valuespython pandas使用以前的计算值
【发布时间】:2015-10-21 10:02:48
【问题描述】:

我是 python 新手,我有一个无法解决的问题。所以,我需要你的帮助。 我有一个包含两列的数据框 df:Close_M 和 Close_AA。 关键是,我想像这样计算两个新列 Resultat_M 和 Resultat_AA:

for i in symbol_list:
    df['Result'+'_'+i] = (df['Close'+'_'+i] / df ['Close'+'_'+i].shift(1) ) * df['Result'+'_'+i].shift(1)`

我想将 Resultat 列的值初始化为 100。

输入数据框

 Close_M 

  10         
   5         
  12         
  14      

Close_AA

8         
9         
10      
7      

预期输出数据帧

Resultat_M

 100       
 50        
 120         
 140

Resultat_AA  

 100         
 112,5       
 125         
 87,5  

例如 Resultat_M, 50=(5/10)*100 ; 120 = (12/5)*50;

但是我的代码不起作用。你知道如何做到这一点吗? 谢谢

更正后,我有同样的错误:

当我运行你在回答中给我的代码时的输出:

我拥有的输出数据框:

Resultat_AA

Nan

112,5

111,11

70

Resultat_M

Nan

50

240

116,6666667

为什么我没有预期的结果?我认为除法后,它将每行乘以 100,而不是乘以我想要的先前计算的值。

【问题讨论】:

    标签: python pandas calculated-columns shift


    【解决方案1】:
    1. 用初始值预先设置结果列:

      df ['Result_' + i] = 100
      
    2. 计算结果列中的实际值

      df['Result'+'_'+i] = (df['Close'+'_'+i].iloc[1:] / df ['Close'+'_'+i].iloc[:-1] ) * df['Result'+'_'+i].iloc[:-1]
      

    请注意,第一项正在迭代到最后一个值。

    【讨论】:

    • 感谢您的回复。如何在开始计算之前将列 Result 的第一个值初始化为 100 ?
    • df['Result'].iloc[0] = 100
    • 我收到一个错误。请参阅上面的 python 错误链接添加到我的问题。
    • 该错误告诉您数据框中没有Result_M 列。所以,当你设置列名时应该有问题。您能否提供更多代码并指出失败的行? UPD:顺便说一句,您的示例和代码中的列名称不同 - ResultatResult - 这不是原因吗?
    • 更正后我有同样的错误,我添加了我在 python 中运行的截图
    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2017-01-26
    • 1970-01-01
    • 2018-12-10
    • 2018-10-28
    相关资源
    最近更新 更多