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)

    )

)

提前致谢。


慕妹3146593
浏览 192回答 2
2回答

桃花长相依

您可以构建一个系列映射并将其应用于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                  101   BBB      Lore Ipsum      9                   92   CCC      Lore Ipsum      8                   83   DDD  AAA Lore Ipsum      0                  104   EEE  BBB Lore Ipsum      0                   95   FFF  CCC Lore Ipsum      0                   86   GGG  ZZZ Lore Ipsum      0                   0

慕哥9229398

你可以这样做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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python