对pandas数据帧列使用条件if/else逻辑

2024-10-01 09:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我的名为pw2的数据框看起来像这样,其中我有两列,pw1和pw2,它们是获胜的概率。我想执行一些条件逻辑,根据pw1和{}创建另一个名为WINNER的列。在

+-------------------------+-------------+-----------+-------------+
|          Name1          |     pw1     |   Name2   |     pw2     |
+-------------------------+-------------+-----------+-------------+
| Seaking                 | 0.517184213 | Lickitung | 0.189236181 |
| Ferrothorn              | 0.172510623 | Quagsire  | 0.260884258 |
| Thundurus Therian Forme | 0.772536272 | Hitmonlee | 0.694069408 |
| Flaaffy                 | 0.28681284  | NaN       | NaN         |
+-------------------------+-------------+-----------+-------------+

我想在函数中有条件地执行此操作,但遇到了一些问题。在

  • 如果pw1>;pw2,则填充Name1
  • 如果pw2>;pw1,则填充Name2
  • 如果填充了pw1,但pw2没有,则填充Name1
  • 如果填充了pw2,但pw1没有填充,则填充Name2

但是我的函数不起作用-由于某些原因,检查值是否为null是不起作用的。在

^{pr2}$

Tags: 数据函数gtnan概率name1winnername2
1条回答
网友
1楼 · 发布于 2024-10-01 09:24:22

不要使用apply,这是非常慢的。使用np.where

pw2 = df.pw2.fillna(-np.inf)
df['winner'] = np.where(df.pw1 > pw2, df.Name1, df.Name2)

一旦NaN总是丢失,就可以fillna()它与-np.inf产生相同的逻辑。在


看看你的代码,我们可以指出几个问题。首先,您要比较df['pw1'] = None,这是用于比较的无效python语法。您通常希望使用==运算符比较事物。但是,对于None,建议使用is,例如if variable is None: (...)。然而,您又处在一个pandas/numpy的环境中,这里实际上有几个空值(NoneNaNNaT等)的值。在

因此,最好使用pd.isnull()df.isnull()检查可空性。在

为了说明这一点,您的代码应该是这样的:

^{pr2}$

但再次强调,一定要使用np.where。在

相关问题 更多 >