我有以下问题,一方面我有一个包含两列的数据框,人名和他们处理的技术:
import pandas as pd
import numpy as np
censo = pd.DataFrame({"Name":["Uriel","Ricardo","Rodrigo","Arion"], "Tec":[("Sas, Python"),("Python, Pyspark"),("Python, Tableau"),("Excel")]})
censo.head(10)
输出是这样的:
然后我有另一个数据框,它有另外两列:请求和请求需要的技术:
tec = pd.DataFrame({"Request":["001","002","003","004"], "Tec":["Python","Sas","Tableau","Excel"]})
tec.head(5)
其输出如下:
我想要实现的是创建一个名为“分配”的列,其中显示第一个数据帧中的人名,该数据帧最适合请求中请求的技术。
我尝试将技术的价值转换为假人,然后尝试进行匹配,但我什至不接近我需要的东西。
a = censo['Tec'].str.get_dummies(sep=',')
a = a.drop_duplicates()
a = a.loc[~(a==0).all(axis=1)]
censo_ = pd.concat([censo,a], axis = 1)
censo_.head()
tec['Assignment'] = censo['Name'].apply(lambda x: 'Python' in x)
tec.head()
有什么想法可以解决这个问题吗?
首先,谢谢!
检查 str.get_dummies
out = censo.join(censo['Tec'].str.get_dummies(','))
更新
out = censo.assign(Tec=censo.Tec.str.split(',')).explode('Tec').\
merge(tec,how='left').groupby(['Request','Tec'])['Name'].agg(list)
Request Tec
001 Python [Ricardo, Rodrigo]
002 Sas [Uriel]
004 Excel [Arion]
Name: Name, dtype: object
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句