Pandas新增一列并按条件赋值?

[图片] DataFrame新增一列,新列值为:如果list为空,赋值为0;如果list列不为空,将amount列中对应的行值赋值到新列。目前想到的是…
关注者
54
被浏览
489,409

7 个回答

谢邀,这个比较简单,你的想法是对的。

一行代码解决问题

data.apply(lambda x: x.amount if x.list!="" else 0, axis=1)

pandas很灵活,实现的方式有很多。参考了 @杨航锋 @张翼轸 的回答,请允许我整理汇总一下,方便其他读者参考和对比

import pandas as pd
import numpy as np
if __name__ == '__main__':
    data = {'amount': [100, 200, 300, 400, 500],
            'name': ['', '商品1', '商品3', '', '商品3']}
    df = pd.DataFrame(data)
    # 杨航锋的方法
    df['x1'] = df.apply(lambda x: x.amount if x.name != "" else 0, axis=1)
    # 张翼轸的方法
    df['x2'] = np.where(df['name'] == '', 0, df['amount'])
    df['x3'] = df['amount'].where(df['name'] != '', 0)
    df['x4'] = df['amount']
    df.loc[df['name'] == '', 'x4'] = 0
    def multiple_columns(row):
        out = {}
        out['double_amount'] = row['amount'] * 2