根据其他列更新列值

克里斯

我对Pandas的了解较弱,对Python的了解也不深。

我想d.Alias根据现有列(d.Companyd2.Alias的值更新列()。d.Alias应该等于d2.Aliasifd2.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.nanThe Shoe Company是因为对于该实例,不需要别名。

我已经尝试使用.locfor循环,while循环,pandas.wherenumpy.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])

BEN_YO

解决方案 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章