为了账号安全,请及时绑定邮箱和手机立即绑定

Python 3 中的条件查找

Python 3 中的条件查找

慕妹3146593 2021-09-25 09:47:33
请帮忙。有数据框:ArtNo   Description     PriceAAA     Lore Ipsum      10BBB     Lore Ipsum      9CCC     Lore Ipsum      8DDD     AAA Lore Ipsum  0EEE     BBB Lore Ipsum  0FFF     CCC Lore Ipsum  0GGG     ZZZ Lore Ipsum  0HHH     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       8GGG     ZZZ Lore Ipsum  0       0HHH     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)    ))提前致谢。
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

您可以构建一个系列映射并将其应用于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


查看完整回答
反对 回复 2021-09-25
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

你可以这样做pd.merge:


 #create new dataframe with ArtNo created from part of the Description

 df2 = df.copy()[['Description']]

 df2.columns = ['ArtNo']

 df2['ArtNo'] = df2['ArtNo'].str.split(n=1).str[0]


 #merge price from the first dataframe

 df2 = pd.merge(df2, df[['ArtNo', 'Price']], how='left', on='ArtNo')


 #create a new column 'Price (multiplied)' and fill NANs from original 'Price' column

 df['Price (multiplied)'] = df2['Price'].values

 df['Price (multiplied)'] = df['Price (multiplied)'].fillna(df['Price']).astype(int)


查看完整回答
反对 回复 2021-09-25
  • 2 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信