问题描述
我有2列字符串,如果行中每个字符串的前3个字符匹配,我想创建一个带有“是”或“否”的列。基本上,代码遍历第1列第1行的前3个字符,并将其与第2列第1行进行比较,以查看前3个字符是否匹配;如果是,则应在示例的第3列中显示“是”。
IE:第1行第1列扫描“ p”“ a””,然后在第1行第2列中查找并扫描“ p”“ a””,这意味着它们相同,并且在第3列中应为true
我对python很陌生;我的道歉。
原始表:
print(df)
col1 col22
Index
0 Img Img_A_10
1 Fruit Fruit_A_100
2 Img Img_A_10
3 Ball Ball_B_120
4 Ball Ball_B_120
5 Fruit Fruit_A_100
6 shirt shirt
7 Fruit Fruit_A_100
预期输出表:
+-------------+---------+----------+
| Row Index | Col1 | Col2 |
+-------------+---------+----------+
| 1 | pasta | pastas |
| 2 | sauces | orange |
| 3 | kiwi | kiwis |
+-------------+---------+----------+
解决方法
这里是单线:
df['Col3'] = (df['Col1'].str[:3] == df['Col2'].str[:3]).map(
{True: 'YES',False: 'NO'})
经验法则:使用pandas / numpy数据所做的几乎所有事情在矢量格式下都更好,即不使用循环。
第一步:从列中的所有字符串中提取前三个字母:
您可以通过df['col'].str
对象对列执行几乎所有标准的字符串操作。此处:df['Col1'].str[:3]
步骤2:检查3个字符的前缀是否匹配:再次,您可以直接比较列以获取一列布尔值。 df['Col1'].str[:3] == df['Col2'].str[:3]
第3步:将布尔值替换为“是”和“否”。希望您能看到它的去向:boolean_data.map({True: 'YES',False: 'NO'})