我正在处理我的第一个机器学习问题,并且正在努力清理数据集中的分类特征。我的目标是建立攀岩推荐系统。

问题1:

我有与错误信息有关的三列相关的列:

现在看起来像什么:


我希望它看起来像什么:


如果按位置名称分组,则有不同的location_id编号和与该名称关联的国家/地区。但是,每种差异都有明显的赢家/多数。我有一个200万个条目的数据集,给定location_id和location_country的模式GIVEN,location_name压倒性地指向一个答案(例如:clear_creek的“ 300”和“ USA”)。

使用pandas / python,如何将我的数据集按l​​ocation_name分组,如何基于该位置名称计算location_id和location_country的模式,然后使用基于location_name的这些模式计算替换整个id和country列,以清理我的数据?

我玩过groupby,replace,replicated,但是我认为最终我将需要创建一个函数来执行此操作,老实说,我不知道从哪里开始。 (对于我的编码天真,我事先表示歉意)我知道有一个解决方案,只需要指出正确的方向即可。

问题2:

另外,有人建议在我的location_name类别(42,012 / 2百万)和location_country(46,890 / 2百万)列中填写NaN值吗?最好保持为未知值?我觉得根据频率填写这些功能将对我的数据集造成极大的影响。

data = {'index': [1,2,3,4,5,6,7,8,9],
        'location_name': ['kalaymous', 'kalaymous', 'kalaymous', 'kalaymous',
                          'clear_creek', 'clear_creek', 'clear_creek',
                          'clear_creek', 'clear_creek'],
        'location_id': [100,100,0,100,300,625,300,300,300],
        'location_country': ['GRC', 'GRC', 'ESP', 'GRC', 'USA', 'IRE',
                             'USA', 'USA', 'USA']}
df = pd.DataFrame.from_dict(data)


***寻找它返回:

improved_data = {'index': [1,2,3,4,5,6,7,8,9],
            'location_name': ['kalaymous', 'kalaymous', 'kalaymous', 'kalaymous',
                              'clear_creek', 'clear_creek', 'clear_creek',
                              'clear_creek', 'clear_creek'],
            'location_id': [100,100,100,100,300,300,300,300,300],
            'location_country': ['GRC', 'GRC', 'GRC', 'GRC', 'USA', 'USA',
                                 'USA', 'USA', 'USA']}

new_df = pd.DataFrame.from_dict(improved_data)

最佳答案

您可以使用transform通过计算模式来使用df.iat[]

df=(df[['location_name']].join(df.groupby('location_name').transform(lambda x: x.mode()
                                                   .iat[0])).reindex(df.columns,axis=1))
print(df)




  index location_name location_id location_country
0     1     kalaymous         100              GRC
1     1     kalaymous         100              GRC
2     1     kalaymous         100              GRC
3     1     kalaymous         100              GRC
4     5   clear_creek         300              USA
5     5   clear_creek         300              USA
6     5   clear_creek         300              USA
7     5   clear_creek         300              USA
8     5   clear_creek         300              USA

09-04 12:28
查看更多