如何根据另一列包含子字符串的字符串将一列字符串标记为编号组?

How can I label a column of strings into numbered groups based on another column containing substrings?

提问人:asdf123 提问时间:11/30/2022 最后编辑:asdf123 更新时间:11/30/2022 访问量:28

问:

我有第一列,大约有 4920 种不同的化合物。

例如:

0              Ag(AuS)2      
1            Ag(W3Br7)2      
2      Ag0.5Ge1Pb1.75S4     
3     Ag0.5Ge1Pb1.75Se4     
4                Ag2BBr      
...                 ...      
4916             ZrTaN3     
4917               ZrTe      
4918             ZrTi2O      
4919             ZrTiF6      
4920               ZrW2  

我有第 2 列,其中包含元素周期表的所有元素,以数字方式列出原子序数

0      H
1     He
2     Li
3     Be
4      B
..   ...
113   Fl
114  Uup
115   Lv
116  Uus
117  Uuo

如何根据化合物的第一个元素对应于第 2 列中的原子序数将第一列分类,以便我可以返回第一列

Ag 的原子序数 = 27 Zr 的原子序数 = 40

    0            47      
    1            47      
    2            47     
    3            47    
    4            47      
    ...                 ...      
    4916         40    
    4917         40       
    4918         40         
    4919         40        
    4920         40     
Python 字符串 浮点 分组 categorical-data

评论


答:

2赞 Matija Pul 11/30/2022 #1

由于第一个元素可以是不同数量的字母,因此最简单的解决方案是使用正则表达式方法来获取第一部分。 例如:

import re

compounds = ["Ag(AuS)2", "HTiF", "ZrTaN3"]

for compound in compounds:
    match = re.match(r"[A-Z][a-z]*", compound)
    if match:
        fist_element = match.group(0)
        print(fist_element)

这将打印出每个化合物的第一个元素。 注意:如果有一些更复杂的化合物,你需要调整你的正则表达式,我建议使用 https://regex101.com/ 作为游乐场。

一旦你有了这些信息,它只需要与第二列中的元素连接,如果你将该列映射到类似于以下内容的字典,这将是最简单的:

{ H: 0, He: 1, Li: 2 ...}

这将允许您通过调用 .dict_with_elements.get(first_element)

从那里开始,剩下的就是循环和写入数据。我希望这会有所帮助。