我有一个非常大的数据帧(~1.7MM行×6列).相关数据的简化示例如下:
City Borough
Brooklyn Brooklyn
Astoria Queens
Astoria Unspecified
Ridgewood Unspecified
Ridgewood Queens
Run Code Online (Sandbox Code Playgroud)
所以我试图根据City列中的信息填充'Unspecified'值.例如,City Ridgewood在一个实例中位于Unspecified Borough,但正确地将Borough列为数据集中其他地方的Queens.
我已经探索过Panda的补充,但它似乎不符合我的需求.我也考虑过np.where方法,但我不确定它在这种情况下是如何工作的.我对Pandas很新,但是地图/应用功能可能是我需要的吗?这可能可以通过一千种不同的方式实现,但是在寻找不会因数据大小而爬行的东西.
编辑:我能够创建一个字典,其中包含城市和行政区之间发生率最高的"对",其代码如下:
specified = data[['Borough','City']][data['Borough']!= 'Unspecified']
paired = specified.Borough.groupby(specified.City).max()
paired = paired.to_dict()
Run Code Online (Sandbox Code Playgroud)
配对的词典以城市为关键,自治市镇为价值.现在最后一步是将其应用/映射回行政区列......我该怎么做?
这是一种方法:
>>> d
City Borough
0 Brooklyn Brooklyn
1 Astoria Queens
2 Astoria Unspecified
3 Ridgewood Unspecified
4 Ridgewood Queens
>>> realData = d[d.Borough != "Unspecified"]
>>> realData = pandas.Series(data=realData.Borough.values, index=realData.City)
>>> d['Borough'] = d.City.map(realData)
>>> d
City Borough
0 Brooklyn Brooklyn
1 Astoria Queens
2 Astoria Queens
3 Ridgewood Queens
4 Ridgewood Queens
Run Code Online (Sandbox Code Playgroud)
这假设每个城市都有一个非未指定的自治市镇值。(如果城市没有值但未指定,则该行政区将显示为 NA。)
编辑:如果您已经在编辑的帖子中创建了字典,只需使用d['Borough'] = d.City.map(paired['Borough'])将每个城市映射到字典中的行政区即可。 map是一个值得了解的有用方法。它可以使用 Pandas 系列、字典或返回给定键的映射值的函数来映射值。