能否在Pandas DataFrame中创建互相依赖的多列?
Pandas中实现互相依赖的列(模拟Excel循环引用)
直接执行你给出的代码会报错,因为创建列A时,DataFrame中还不存在列B,会触发KeyError。Pandas的矢量化赋值是一次性处理整列,默认不支持这种依赖其他未定义列/前一行结果的循环引用逻辑,和Excel的迭代计算机制不同。
可行的实现方式
要实现这种逐行依赖的逻辑,需要通过逐行迭代计算来模拟:
- 先初始化
A和B列,定义第一行的初始值(因为第一行没有上一行的B,需要手动指定初始状态) - 从第二行开始,依次根据上一行的
B计算当前行的A,再根据当前行的A计算B
示例代码:
import numpy as np import pandas as pd Range = np.arange(0,10,1) Table = pd.DataFrame({"Row": Range}) # 初始化A、B列,设置第一行初始值 Table["A"] = 0 Table["B"] = 0 # 从第二行开始迭代计算 for i in range(1, len(Table)): # 根据上一行的B计算当前行A Table.loc[i, "A"] = 1 if Table.loc[i-1, "B"] > 0 else 0 # 根据当前行的A计算当前行B Table.loc[i, "B"] = 1 if Table.loc[i, "A"] == 1 else 0
说明
- 这种方式和Excel开启迭代计算后的逻辑一致,每一行的结果依赖前一行的输出
- 迭代计算的效率低于Pandas的矢量化操作,适合中小规模数据集;如果数据量极大,可以考虑用NumPy数组循环来优化
- 可以根据业务需求调整第一行的初始值,比如将
Table.loc[0, "B"] = 1,后续行的A和B会全部变为1
内容的提问来源于stack exchange,提问作者Naor
相关产品推荐
相关产品推荐

