Aloha Friends,
我在一个列中有一个带有各种“course_names”的df我需要遍历这个并返回任何字符串匹配并返回一个值
为此,我创建了一个包含每个部分字符串变化的字典,以便将其映射到值
col A
Phsyics, Maths
Algebra & Maths
History
Geology
Biology
mapping = {'Algebra & Maths' : 'Mathematics',
'Phsyics' : 'Science',
'History' : 'History',
'Geology' : 'Geology',
'Biology' : 'Science'}
# this goes on for about another 35 lines.
下一个问题分两步进行
我需要将键匹配映射到新列中的值
将值分配给新列后,我需要遍历新列并查找与查询匹配的任何内容
例如,如果用户选择“科学”,我需要将他映射到新列以说“是”,用户可以拥有多个科目,但我确信我可以解决这个难题,这是第1部分!
到目前为止,我已经掌握了有限的编码知识(我以为我现在能够解决这个问题......但是嘿嘿)
到目前为止我的代码:
import os
import pandas as pd
import numpy as np
os.chdir('')
df = pd.read_excel('Bookings.xlsx')
mapping = {'Algebra & Maths' : Mathematics,
'Phsyics' : 'Science'}
df['keys'] = [k for k, v in Mapping.items() if df['course_name'] in k]
当我运行此代码时,我得到:TypeError:'in'要求字符串作为左操作数,而不是系列
我已经经历了大约30个SO线程,我无法解决这个问题,所以我最诚挚的道歉!
DN。
为Rakesh编辑:
course_name,
this course English is good
science and biology course attend
English Literature with Shakespeare
Maths in the Golden Age
所以我的DF有一个这样的数据列表,所以,在我的脑海中,我想在我的dict中对我的键运行部分匹配,并在新列中返回值。
所以我的问题在于对我的词典中的键进行部分匹配。这有意义吗?
答案 0 :(得分:3)
您的语法错误很少。您也可以使用map
<强>尝试:强>
import pandas as pd
df = pd.DataFrame({"course_name" : ["Algebra & Maths", "Phsyics"]})
Mapping = {'Algebra & Maths' : 'Mathematics','Phsyics' : 'Science'}
df["keys"] = [v for k, v in Mapping.items() if k in df['course_name'].tolist()]
#df["keys"] = df["course_name"].map(Mapping)
print(df)
<强>输出:强>
course_name keys
0 Algebra & Maths Mathematics
1 Phsyics Science