python - 如何在熊猫中增量地创建 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
应该有类似的东西,但不知道如何在这个用例中使用它。
我希望我的意图很清楚,即使缺少语法。
请注意,我正在寻找一个熊猫解决方案,我自己循环数据框很明显。
解决方案
请注意我正在寻找熊猫解决方案。
使用 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'])
推荐阅读
- ios - 允许在 SFSafariViewController 中使用自签名证书
- python - 使用光线投射测量点到表面的距离
- c# - LINQ to Entities 尝试对两个表进行投影并聚合它们
- amazon-web-services - 是否可以用不同的 AMI 替换 EC2 实例上的 AMI?
- elasticsearch - ElasticSearch 聚合组合成一个数组
- python - 输入数据不包含 Turi 创建模型训练中的任何行
- python - 使用请求的“ssl 握手失败”
- google-chrome - d3 svg rect 不会在 chrome 中呈现
- regex - 仅过滤文件中的大写单词
- sql-server - SQL Server:对来自两个不同表的列施加唯一性的方法