熊猫-迭代数据框并更新每一行

时间:2020-04-08 20:35:50

标签: python pandas

我正在尝试迭代数据框并更新每一行,但没有累加。逻辑是,当关键字与skill_list const renderCalendarDays = ()=>{ return getDaysWithEvents().map((day, index) => { const isToday = Calendar.interval(day, today) === 1; console.log(isToday) const events = renderEvents(day); return ( <CalendarDay key={'day_'+getSerializedDay(day)} day={day} events={events} isToday={isToday} onClick={props.onDayClick} onMouseOut={props.onEventMouseOut} onMouseOver={props.onEventMouseOver} /> ); }); } 中的任何字符串匹配时,然后更新分数。

final_database

['java', 'sql', 'oracle', 'json']

代码

                          Subject       Keyword Count  
0  Mobile_Application_Developer      android      2  
1  Mobile_Application_Developer          sql      1  
2  Mobile_Application_Developer         java      1  
0  Mobile_Application_Developer           N/A     0  
0  Mobile_Application_Developer          sql      3  
0  Mobile_Application_Developer          sql      2  
1  Mobile_Application_Developer         java      4  
2  Mobile_Application_Developer  engineering      2  
3  Mobile_Application_Developer   javascript      1  
0  Mobile_Application_Developer           N/A     0  
0  Mobile_Application_Developer           N/A     0  
0  Mobile_Application_Developer  engineering      1  
0  Mobile_Application_Developer           N/A     0  
0  Mobile_Application_Developer     building      1  
0  Mobile_Application_Developer  engineering      2  
0  Mobile_Application_Developer           N/A     0  
0  Mobile_Application_Developer  engineering      1  
0  Mobile_Application_Developer           N/A     0  

更新后的final_database

skill= "java:4,sql:3,oracle:2,json:4"
keyword_list = re.split(',', skill)
skill_list = []
total_score = 0

for x in range(len(keyword_list)):
    lang = re.split(':', keyword_list[x]) 

    skill_list.append(lang[0])
    total_score = total_score + int(lang[1]) 

for index, row in final_database.iterrows():

    for x in range(len(keyword_list)):
        lang = re.split(':', keyword_list[x]) 

        if row['Keyword'].strip() in skill_list:
            final_database.set_value(index,'Score',lang[1])

3 个答案:

答案 0 :(得分:1)

这是一个解决方案:

skill= "java:4,sql:3,oracle:2,json:4"

skill_map=dict(map(lambda x: x.split(":"), skill.split(",")))

df["Score"]=df["Keyword"].str.strip().map(skill_map).fillna(0)

输出:

                         Subject      Keyword Count Score
0   Mobile_Application_Developer      android     2     0
1   Mobile_Application_Developer          sql     1     3
2   Mobile_Application_Developer         java     1     4
3   Mobile_Application_Developer          N/A     0     0
4   Mobile_Application_Developer          sql     3     3
5   Mobile_Application_Developer          sql     2     3
6   Mobile_Application_Developer         java     4     4
7   Mobile_Application_Developer  engineering     2     0
8   Mobile_Application_Developer   javascript     1     0
9   Mobile_Application_Developer          N/A     0     0
10  Mobile_Application_Developer          N/A     0     0
11  Mobile_Application_Developer  engineering     1     0
12  Mobile_Application_Developer          N/A     0     0
13  Mobile_Application_Developer     building     1     0
14  Mobile_Application_Developer  engineering     2     0
15  Mobile_Application_Developer          N/A     0     0
16  Mobile_Application_Developer  engineering     1     0
17  Mobile_Application_Developer          N/A     0     0

答案 1 :(得分:0)

如果我的理解正确,您想将map的关键字添加到得分中。

Pandas Map Doc

keyword_mapping={'java':4, 'sql':3, 'oracle':2, 'json':4}

final_database['score']=final_database.keyword.str.lower().map(keyword_mapping)

说明: 我已经使用了数据帧final_database并已经使用了一系列的关键字列。在这种情况下,我使用lower来使用pandas string methods获得小写的值

然后,我使用键(关键字)及其对应值(分数)的字典应用了地图

答案 2 :(得分:0)

skills =  {'java':4,
            'sql': 3,
           'oracle' : 2, 
           'json':4}
df['score'] = df.loc[df['Keyword']].map(skills)