【发布时间】:2018-06-01 03:21:03
【问题描述】:
我对 Pandas 的掌握较弱,对 Python 的理解不深。
我想根据现有列(d.Company 和 d2.Alias)的值更新列(d.Alias)。如果d2.Alias 是d.Company 的子字符串,d.Alias 应该等于d2.Alias。
示例数据集:
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']}
The Shoe Company 的 np.nan 是因为在这种情况下不需要别名。
我尝试过使用.loc、for 循环、while 循环、pandas.where、numpy.where,以及每种方法的几种变体,但都没有理想的结果。当使用for 循环时,d2.Alias 的结尾被复制到d.Alias 中的所有行。但是,我无法重现这一点。
我以前看过的帖子,我无法上班,或者我不理解它们:Conditionally fill column with value from another DataFrame based on row match in Pandas pandas create new column based on values from other columns
非常感谢任何帮助!
编辑:
更新:
经过几天的修补,我达到了预期的结果。有了温的回应,我不得不改变一些事情。
首先,我从df2.Alias 创建了一个名为aliases 的列表:aliases = df2.Alias.unique()
然后,我不得不删除.map(df2.set_index('Company').Alias。生成我想要的结果的行:df1['Alias'] = df1.Company.apply(lambda x: [process.extract(x, aliases, limit=1)][0][0][0])。
【问题讨论】:
-
你能得到预期的输出吗?我不清楚,您所说的“如果
d2.Alias包含在d.Company中”是什么意思 -
是那些数据框吗?
-
添加了一个结果并更改了“如果 d2.Alias 包含在 d.Company 中”@HarvIpan
-
@Wen 是的,这些是数据框