首页 > 解决方案 > 如何在熊猫中增量地创建 2 列?

问题描述

举个例子

a  b       c
1 nan    nan
2 nan    nan
3 nan    nan
4 nan    nan

(或者没有 b 和 c 列)

我想创建列 b 和 c 以便每一行以自定义方式依赖于前一行。

对于此示例,依赖项将是 (b 依赖于 a 和 c,而 c 依赖于 a 和 b)
在伪代码中:

def foo(row, default=1):
    Return row["a"] or default + 2* row["c"] or default, row["a"] or default + row["b"] or default

意思是,每列的停止条件是 1,如果存在值,则递归地使用它们:

Next b = prev a + 2* prev c

Next c = prev a + prev b

结果将是

a  b       c
1  3       2
2  5       4
3  10      7
4  17      13

我认为rolling应该有类似的东西,但不知道如何在这个用例中使用它。

我希望我的意图很清楚,即使缺少语法。


请注意,我正在寻找一个熊猫解决方案,我自己循环数据框很明显。

标签: pythonpandas

解决方案


请注意我正在寻找熊猫解决方案。

使用 Pandas 并没有提高速度,因为迭代计算不容易矢量化。

def compute_next(row):
  prev_a, prev_b, prev_c = row
  a = prev_a + 1
  b = prev_a + 2 * prev_c
  c = prev_a + prev_b
  return a, b, c

data = [[1, 3, 2]]

for i in range(10):
  data.append(compute_next(data[i]))

df = pd.DataFrame(data, columns=['a', 'b', 'c'])

推荐阅读