Pandas 根据多列条件创建新列

标签 pandas feature-engineering

这让 pandas 难住了。我有一个包含 580 万行和日期索引的数据框。我有 5 列 A、B、C、D 和 E,只想根据以下简单数学创建一个新列 F_Score:

F_Score=0
if A > = B:
    F_Score = 1.0 
else:
    F_Score= -1.0

if B > = C:
    F_Score = F_Score + 1.0 
else:
    F_Score = F_Score - 1.0

if C > = D: 
    F_Score = F_Score + 1.0 
else:
    F_Score = F_Score-1.0

if D > = E:
    F_Score = F_Score + 1.0 
else:
    F_Score = F_Score -1.0

我似乎找不到一种简单的方法来做到这一点。有什么建议吗?

我尝试将所有列转换为 numpy 数组,然后执行 for 循环,将结果存储到新数组中,然后为数据帧创建列 F。这看起来效率很低。有更好的办法吗?

最佳答案

np.sum(-np.sign(np.diff(df.to_numpy(), axis=1)), axis=1)

从 if 链来看,如果我们采用逐列连续差异并查看它们的符号:

  • 如果符号为正,则减 1
  • 如果符号为负,则加 1 (请注意,差异是从右到左计算的)。

因此,我们进入 NumPy 域,获取逐列差异,获取符号,对它们取反,它们的总和就是此处所需的 F_score。

pandas 也支持 diff,但由于问题与标签无关,并且您提到您有很多行,因此转到 NumPy 域应该会使其更快,并且希望足够快。

关于Pandas 根据多列条件创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74941975/

相关文章:

python - 与 Pandas 进行二维分箱

machine-learning - 分类变量的降维

python - pandas ExcelFile 是否在初始化时解析所有工作表? (并且可以避免)

python - 是否有任何关于 scipy、numpy、pandas、scikit 生态系统中包之间相互依赖关系的文档? Python

python - 最小化python函数中的if语句

python - 检查几列中的日期并在 python 中创建一个新列

python - 如何获得具有预处理和分类步骤的决策树管道的特征重要性?

python - 更改 pandas DataFrame 中日期时间列中的日期

python-3.x - ValueError : The number of FixedLocator locations (5), 通常来自对 set_ticks 的调用,与刻度标签的数量不匹配 (12)

R 如何滞后 4000 列 50 次