首页 > 解决方案 > 寻找更好的解决方案在 pandas 中创建条件列

问题描述

考虑以下

df:

id,flag,amt 

10,1,100 
11,0,100
13,1,100
14,0,100

当前代码:

def func(row):
    if row['flag'] == 1:
        val = row['amt'] * 2
    else:
        val = row['amt']
    return val

    df['op'] = df.apply(func,axis=1)

输出:

df:

    id,flag,amt,op 

    10,1,100,200
    11,0,100,100
    13,1,100,200
    14,0,100,100

有没有更好的方法来实现这一点?这个解决方案需要时间!

标签: pythonpandas

解决方案


您可以通过以下方式批量执行此操作:

df['op'] = (df['flag']+1) * df['amt']

这给了我们:

>>> (df['flag']+1) * df['amt']
0    200
1    100
2    200
3    100
dtype: int64

如果可以有除anddf['flag']以外的其他值,我们可以使用,例如:01np.where(..)

df['op'] = np.where(df['flag'] == 1, 2*df['amt'], df['amt'])

推荐阅读