首页 > 解决方案 > Pandas/Python 使用字典根据多个条件创建列

问题描述

我正在寻找一种更短更优雅的方式来编写以下条件,假设我有 30 种不同的组合。是否可以映射具有多个条件或其他内容的某种字典?

def set_name(df):
    if df['PRODUCT'] == 'A' and df['TYPE'] == 'C2':
        return 'AAC2'
    elif df['PRODUCT'] == 'A' and df['TYPE'] == 'C3':
        return 'AAC3'
    elif df['PRODUCT'] == 'B' and df['TYPE'] == 'C2':
        return 'BBC"'
    
df['RETURN'] = df.apply(set_name, axis=1)

另一种方法是下面的,如果我有很多组合,它仍然很长。

conditions = [
    (df['PRODUCT'] == 'A') & (df['TYPE'] == 'C2'),
    (df['PRODUCT'] == 'A') & (df['TYPE'] == 'C3')
]

values = ['AAC2', 'AAC3']

df['RETURN'] = np.select(conditions, values)

标签: pythonpandasdictionarymultiple-columns

解决方案


创建助手 DataFrame 并通过以下方式使用左连接DataFrame.merge

products = ['A','A']
types = ['C2','C3']
values = ['AAC2', 'AAC3']

df1 = pd.DataFrame({'PRODUCT':products,
                    'TYPE':types,
                    'RETURN': values})


df = df.merge(df1, on=['PRODUCT','TYPE'], how='left')

推荐阅读