我想清理名称值,我有以下情况。熊猫在名称相同且名称不同的情况下转换名称?
ID name
1 1 Company
2 1 Company, LLC
我想正常化,所以我只喜欢一个名称,以便:
ID name
1 1 Company
2 1 Company
我想清理名称值,我有以下情况。熊猫在名称相同且名称不同的情况下转换名称?
ID name
1 1 Company
2 1 Company, LLC
我想正常化,所以我只喜欢一个名称,以便:
ID name
1 1 Company
2 1 Company
对于示例:
df.loc[df.name == 'Company, LLC', 'name'] = 'Company'
您可以使用同样的方法反复重映射值序列。如MattR,FuzzyWuzzy所述,如果您想识别更多潜在的匹配项,可以帮助您找到可能相同的字符串。
这将让每个组的第一个元素,并沿着你的数据框的整体尺寸播放它:
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
你可以通过使用'.transform('first')'' –
@JonClements来避免这里的lambda感谢提醒,总是开始x.first()失败,然后我回头:-) – Boud
退房FuzzyWuzzy [这里](https://pypi.python.org/pypi/fuzzywuzzy )。你的日期有多大?是否有可能有一个干净的列表和“硬编码”你需要改变的值? – MattR
嘿它不是太大可能需要改变大约300个值。是否可以用字典来做到这一点?钥匙是身份证,价值是正确的公司名称? – spitfiredd
字典当然是可以的。这将是很多前期手动工作,但在此之后,您只需使用您的字典,根据“ID”列更改“名称”列。如果你的数据变化不大,这可能是一个很好的解决方案。但是,如果你有新的名字进入,那么跟上字典将是一个时间沉淀。如果你需要一个更“永久”的解决方案,FuzzyWuzzy(或类似的东西)可能是最好的选择。 – MattR