我对Pandas的了解较弱,对Python的了解也不深。
我想d.Alias
根据现有列(d.Company
和d2.Alias
)的值更新列()。d.Alias
应该等于d2.Alias
ifd2.Alias
是的子字符串d.Company
。
示例数据集:
d = {'Company': ['The Cool Company Inc', 'Cool Company, Inc', 'The Cool
Company', 'The Shoe Company', 'Muffler Store', 'Muffler Store'],
'Position': ['Cool Job A', 'Cool Job B', 'Cool Job C', 'Salesman',
'Sales', 'Technician'],
'City': ['Tacoma', 'Tacoma','Tacoma', 'Boulder', 'Chicago', 'Chicago'],
'State': ['AZ', 'AZ', 'AZ', 'CO', 'IL', 'IL'],
'Alias': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]}
d2 = {'Company': ['The Cool Company, Inc.', 'The Shoe Company', 'Muffler
Store LLC'],
'Alias': ['Cool Company', np.nan, 'Muffler'],
'First Name': ['Carol', 'James', 'Frankie'],
'Last Name': ['Fisher', 'Smith', 'Johnson']}
之所以如此np.nan
,The Shoe Company
是因为对于该实例,不需要别名。
我已经尝试使用.loc
,for
循环,while
循环,pandas.where
,numpy.where
,和每一个没有理想的结果的几个变化。使用for
循环时,将的结尾d2.Alias
复制到中的所有行d.Alias
。但是,我无法重现该内容。
我看过的以前的文章我不能上班,或者我听不懂:基于Pandas中的行匹配,用另一个DataFrame的值有条件地填充列pandas根据 其他列的值创建新列
任何帮助是极大的赞赏!
编辑:
更新:
经过几天的修补,我达到了预期的结果。在温家宝的回应下,我不得不改变几件事。
首先,我从创建了一个df2.Alias
名为的列表aliases
:
aliases = df2.Alias.unique()
然后,我必须删除.map(df2.set_index('Company').Alias
。生成我要的resutls行:
df1['Alias'] = df1.Company.apply(lambda x: [process.extract(x, aliases, limit=1)][0][0][0])
。
解决方案 fuzzywuzzy
from fuzzywuzzy import process
df1['Alias']=df1.Company.apply(lambda x :[process.extract(x, df2.Company, limit=1)][0][0][0]).map(df2.set_index('Company').Alias)
df1
Out[31]:
Alias City Company Position State
0 Cool Company Tacoma The Cool Company Inc Cool Job A AZ
1 Cool Company Tacoma Cool Company, Inc Cool Job B AZ
2 Cool Company Tacoma The Cool Company Cool Job C AZ
3 NaN Boulder The Shoe Company Salesman CO
4 Muffler Chicago Muffler Store Sales IL
5 Muffler Chicago Muffler Store Technician IL
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句