如何将pandas的startwith和IF结合起来?

我试图做2件事情–第1件事是在df中使用startwith来确定哪些行包含条件,第2件事是在列中添加一个特定的TAG。我一直能够正确地做这两件事,但是分别进行–但在组合时却不成功。

这是一个例子,在兴趣列df’PartNumber’(GLO,GLOA,GLO1,GLOA2,GLO9等)的内容中,共同的分母是 “GLO”,我想添加标签 “GLO系列”。

这段代码成功地可以ID出具有起始条件的行。

search = 'GLO'
search_series = df['PartNumber'].str.startswith(search, na= False)
df[search_series] 

这段代码成功地可以识别出具有特定条件的行–我知道这是因为’==’。面临的挑战是,我必须调出特定的部分,这是我不知道所有的值,因此我试图做’startwith’ 。

df.loc[(df['PartNumber']== 'GLOA2'),'TAG_2']='Glo Series'
print (df)

我试着把两者结合起来,但没有成功。

我试图实现一旦完成一种 “如果这然后那 “的几个条件,总结如下。

df [PartNumber]用来识别基于起始字符的设定条件(‘GLO’, ‘FL0’, ‘MOW’),根据这一点,一个值将被放置在一个设定列中,结果是(‘Glo系列’, ‘Flo系列’, ‘Mow系列’)

解决方案:

假设 TAG_2 列中最初包含了一些其他的值(我把它们用 ?):

      ind PartNumber  Val TAG_2
0  110101        ABC   20     ?
1  110102        GLO   22     ?
2  110103       GLO1   24     ?
3  110104       GLO2   26     ?
4  110105        XYZ   28     ?

一次性完成你的任务(假设你设置的是? 搜索 到想要的值),你可以运行。

df.TAG_2.mask(df['PartNumber'].str.startswith(search, na=False), 'Glo Series', inplace=True)

结果是:

      ind PartNumber  Val       TAG_2
0  110101        ABC   20           ?
1  110102        GLO   22  Glo Series
2  110103       GLO1   24  Glo Series
3  110104       GLO2   26  Glo Series
4  110105        XYZ   28           ?

第二部分

检测 多重 组前缀和设置 TAG_2 对应的组名,采取不同的方法。

  1. 定义一个Series,索引由 “想要的 “前缀和对应的组名作为值组成。

    search = pd.Series(['Glo Series', 'Flo Series', 'Mow  Series'],
        index=['GLO', 'FLO', 'MOW'])
    
  2. 定义一个函数,从零件编号中获取零件系列名称。

    def getSer(PartNo):
        for idx, val in search.iteritems():
            if PartNo.startswith(idx):
                return val
        return 'Alphabet start' if PartNo < search.index.min() else 'Alphabet end'
    

    请注意,如果在循环中没有找到匹配的结果,最后一条指令返回的是 “字母开头‘字母末’ (如您在评论中所要求的)。

  3. 生成结果,更新 TAG_2 (到位)与上述函数的应用结果。

    df.TAG_2.update(df.PartNumber.apply(getSer))
    

这一次,为了测试这段代码,我使用了一个DataFrame,其中包含:

      ind PartNumber  Val TAG_2
0  110101      ABC30   20     ?
1  110102      FLO34   22     ?
2  110103      GLO10   24     ?
3  110104      GLO22   26     ?
4  110105      XYZ26   28     ?
5  110105      MOW55   30     ?
6  110105      XYZ99   28     ?

在上面的代码之后 更新数据 的结果是。

      ind PartNumber  Val           TAG_2
0  110101      ABC30   20  Alphabet start
1  110102      FLO34   22      Flo Series
2  110103      GLO10   24      Glo Series
3  110104      GLO22   26      Glo Series
4  110105      XYZ26   28    Alphabet end
5  110105      MOW55   30     Mow  Series
6  110105      XYZ99   28    Alphabet end

如果你有更多的 “想要的 “组,就改成: 搜索 相应的变量。

给TA打赏
共{{data.count}}人
人已打赏
未分类

在安卓系统中使用HintRequest获取手机号码时,如何获取没有国家代码的手机号码?

2022-9-9 9:32:20

未分类

比较两个文件,打印出与单词相匹配的行。

2022-9-9 9:32:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索