2017-03-03 121 views
1

我想清理名称值,我有以下情况。熊猫在名称相同且名称不同的情况下转换名称?

 ID name 
1  1 Company 
2  1 Company, LLC 

我想正常化,所以我只喜欢一个名称,以便:

 ID name 
1  1 Company 
2  1 Company 
+0

退房FuzzyWuzzy [这里](https://pypi.python.org/pypi/fuzzywuzzy )。你的日期有多大?是否有可能有一个干净的列表和“硬编码”你需要改变的值? – MattR

+0

嘿它不是太大可能需要改变大约300个值。是否可以用字典来做到这一点?钥匙是身份证,价值是正确的公司名称? – spitfiredd

+0

字典当然是可以的。这将是很多前期手动工作,但在此之后,您只需使用您的字典,根据“ID”列更改“名称”列。如果你的数据变化不大,这可能是一个很好的解决方案。但是,如果你有新的名字进入,那么跟上字典将是一个时间沉淀。如果你需要一个更“永久”的解决方案,FuzzyWuzzy(或类似的东西)可能是最好的选择。 – MattR

回答

0

对于示例:

df.loc[df.name == 'Company, LLC', 'name'] = 'Company' 

您可以使用同样的方法反复重映射值序列。如MattR,FuzzyWuzzy所述,如果您想识别更多潜在的匹配项,可以帮助您找到可能相同的字符串。

2

这将让每个组的第一个元素,并沿着你的数据框的整体尺寸播放它:

df 
Out[22]: 
    ID   name 
0 1  Company 
1 1 Company,LLC 
2 2 Companybbb 
3 2 Company,LLC 
4 3 Companyccc 
5 3 Company,LLC 

df.groupby('ID')['name'].transform('first') 
Out[21]: 
0  Company 
1  Company 
2 Companybbb 
3 Companybbb 
4 Companyccc 
5 Companyccc 
Name: name, dtype: object 
+0

你可以通过使用'.transform('first')'' –

+0

@JonClements来避免这里的lambda感谢提醒,总是开始x.first()失败,然后我回头:-) – Boud

相关问题