python - Python 3 中的条件查找
问题描述
请帮忙。有数据框:
ArtNo Description Price
AAA Lore Ipsum 10
BBB Lore Ipsum 9
CCC Lore Ipsum 8
DDD AAA Lore Ipsum 0
EEE BBB Lore Ipsum 0
FFF CCC Lore Ipsum 0
GGG ZZZ Lore Ipsum 0
HHH AAA Lore Ipsum 0
我需要从 ArtNo 列中的文章中的描述列中添加一个乘以价格而不是零的列。如果不匹配(ArtNo 列和 Description 中的第一个单词到空格之间),则将同一行中 Price 列中的相同数字应用于“乘列”:
ArtNo Description Price Price (multiplied) ???
AAA Lore Ipsum 10 10
BBB Lore Ipsum 9 9
CCC Lore Ipsum 8 8
DDD AAA Lore Ipsum 0 10
EEE BBB Lore Ipsum 0 9
FFF CCC Lore Ipsum 0 8
GGG ZZZ Lore Ipsum 0 0
HHH AAA Lore Ipsum 0 10
在 excel 中它是这样工作的:
IF (Price != 0; Price multiplied = Price;
IF(ISERROR(VLOOKUP(MID(Description;1;FIND(
' ';Description;1));TABLE;3;0));Price multiplied = Price;
ESLE: Price multiplied = VLOOKUP(MID(Description;1;FIND(
' ';Description;1));TABLE;3;0)
)
)
提前致谢。
解决方案
您可以构建一个系列映射并将其应用于Description
.
zeros = df['Price'].eq(0)
art_price_map = df[~zeros].set_index('ArtNo')['Price']
first_word = df['Description'].str.split(n=1).str[0]
df['Price (multiplied)'] = df['Price'].mask(zeros, first_word.map(art_price_map))\
.fillna(0).astype(int)
print(df)
ArtNo Description Price Price (multiplied)
0 AAA Lore Ipsum 10 10
1 BBB Lore Ipsum 9 9
2 CCC Lore Ipsum 8 8
3 DDD AAA Lore Ipsum 0 10
4 EEE BBB Lore Ipsum 0 9
5 FFF CCC Lore Ipsum 0 8
6 GGG ZZZ Lore Ipsum 0 0
推荐阅读
- r - 为什么数据会这样表达?
- excel - 将一张纸的最后 3 个单元格相乘并将它们放在另一张纸中
- amazon-web-services - 一次使用单独的 Lambda 处理 AWS SQS 消息
- python - 使用 sqlalchemy-flask 在数据库中存储 XML 文件的最佳方法是什么?
- angular - 如何以角度修复“模块重复”
- podman - Podman 1.6 绑定挂载创建问题
- java - 在多个 JSP 页面中添加 ArrayList
- python-3.x - Celery 只重试循环中的失败请求并继续另一个
- r - 在不使用 Java 的情况下在 R 中写入文件 xlsx
- c# - 选择两个文件时,从右键单击 Windows 上下文菜单中隐藏一个选项