python - 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)
解决方案
创建助手 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')
推荐阅读
- r - tableHTML 中行的条件高亮显示
- mongodb - 将两个数组元素与mongodb聚合中的条件进行比较
- python - 重新排序 CSV 中特定列的行
- python - 制作对某个人做出反应的不和谐机器人的问题
- grafana - Grafana 将面板嵌入到 iframe 中的外部网站中
- kotlin - Kotlin 暴露和继承
- python - 无法安装word2vec(PEP517不能直接安装)
- r - R:针对复杂问题的更好的数据结构和算法
- python - pyspark 在循环中将数组转换为字符串
- mongodb - MongoDB - Robo3t:查询失败,没有好的节点,字段“光标”必须是嵌套对象