提问人:asdf123 提问时间:11/30/2022 最后编辑:asdf123 更新时间:11/30/2022 访问量:28
如何根据另一列包含子字符串的字符串将一列字符串标记为编号组?
How can I label a column of strings into numbered groups based on another column containing substrings?
问:
我有第一列,大约有 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
答:
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)
从那里开始,剩下的就是循环和写入数据。我希望这会有所帮助。
评论