这让 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/