python - 根据 if-elif-else 条件创建新列

标签 python pandas conditional

我有一个数据框 df :

    A    B
a   2    2 
b   3    1
c   1    3

我想根据以下条件创建一个新列:

如果行 A == B: 0

如果行 A > B: 1

如果行 A < B: -1

所以给定上表,应该是:

    A    B    C
a   2    2    0
b   3    1    1
c   1    3   -1 

对于典型 if else我做的案例np.where(df.A > df.B, 1, -1) ,pandas 是否提供了一种特殊的语法来一步解决我的问题(无需创建 3 个新列然后组合结果)?

最佳答案

将上面列出的一些方法形式化:

创建一个对数据框的行进行操作的函数,如下所示:

def f(row):
    if row['A'] == row['B']:
        val = 0
    elif row['A'] > row['B']:
        val = 1
    else:
        val = -1
    return val

然后将其应用到通过 axis=1 选项传递的数据框:

In [1]: df['C'] = df.apply(f, axis=1)

In [2]: df
Out[2]:
   A  B  C
a  2  2  0
b  3  1  1
c  1  3 -1

当然,这不是矢量化的,因此在扩展到大量记录时性能可能不会那么好。不过,我认为它更具可读性。尤其是来自 SAS 背景。

编辑

这里是矢量化版本

df['C'] = np.where(
    df['A'] == df['B'], 0, np.where(
    df['A'] >  df['B'], 1, -1)) 

关于python - 根据 if-elif-else 条件创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21702342/

相关文章:

Python 将 GCS 中的 .json 文件并行读取到 pandas DF 中

python - 如何在多索引 Pandas 中按次日值填充缺失值?

python - 如何在 python 中编写以两个变量(列)为条件的 lambda 函数

sql - SSIS 中的条件拆分

python - 如何对列表的每个元素执行操作并将结果放入 Python 的新列表中?

python - 在 python 中的下划线处拆分并存储第一个值

python - 在 tensorflow 中初始化矩阵

python - 如果某个键的值不止一次,则从列表中删除该元素

mysql - 检索不到一天的行

Python:将列表写入 Pandas 中的列