【问题标题】:adding value to prior row in dataframe within a function将值添加到函数内数据框中的前一行
【发布时间】:2016-09-20 21:23:36
【问题描述】:

我正在寻找一种在函数框架内生成列 C(第一行 = 10000)的解决方案,即没有迭代但具有矢量化:

index  A   B   c
 1     0   0   1000
 2     100 0    900
 3     0   0    900
 4     0  200  1100 
 5     0   0   1100

函数应该如下所示:

 def calculate(self):
     df = pd.DataFrame()
     df['A'] = self.some_value
     df['B'] = self.some_other_value
     df['C'] = df['C'].shift(1) - df['A'] + df['B']........

但是对前一行的引用不起作用。可以做些什么来完成列出的任务?

【问题讨论】:

  • 为什么要删除问题?我有答案。
  • 或者你也找到答案了吗? ;)
  • 抱歉,我自己找到了第一部分的解决方案,使问题看起来很愚蠢
  • 没问题。 ;) 另一个问题很难;)

标签: python function pandas vectorization


【解决方案1】:

这应该可行:

df['C'] = 1000 + (-df['A'] + df['B']).cumsum()

df
Out[80]: 
     A    B     C
0    0    0  1000
1  100    0   900
2    0    0   900
3    0  200  1100
4    0    0  1100

【讨论】:

  • 仍然不感兴趣,有没有办法以矢量化形式引用先前的单元格(本着 .shift(1) 的精神)?在逻辑“如果 A=100 则计算 C=1000+A,否则使用 C 的先前单元格值”?
  • .shift(1) 移动现有系列,它不是动态操作。您描述的是一个迭代的事情,在 Excel 或循环中很容易做到,但对于该操作,您需要向量 C 的处理版本(前一个值是指使用相同公式计算的前一个值)。但是,pandas 使用具有初始值的现有向量。据我所知,没有你描述的循环是不可能的。
猜你喜欢
  • 2016-03-21
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多