我有一个带有两列的pandas数据框,分别是
我现在想要用剩余数据框中国家城市的众数来填充“city”列中的NaN值,例如对于国家A:城市1被提到一次;城市2被提到两次;因此,在索引为2的位置上用“city 2”填充“city”列。我已经完成了。
现在有了国家和相应城市模式的值,我面临两个问题:
第一:情况'country C'是双峰的 - 关键字包含两个条目。我希望这个关键字能够平等地引用每个条目。真实数据集具有多个模式,因此它将是长度大于2的列表。
第二:我卡在了用与“new_dict_locations”中同一行的“country”单元格中的值对应的值替换“city”中的NaN值上。伪代码如下:“遍历‘city’列;如果您在位置‘temp [i,city]’处找到一个缺失的值,请将该行中的‘country’值(->‘country_tmp’)作为字典‘new_dict_locations’的键;如果键‘country_temp’的字典是一个列表,则从该列表中随机选择一个项目;取返回值(->‘city_tmp’)并用该值填充缺失值的单元格(temp[i,city])。
我已尝试使用不同的
非常感谢。
(注:参考问题根据字典替换单元格中的值;然而,我的参考值在另一列中。)
**编辑** 执行
city
和country
。两个列都包含缺失值。请考虑以下数据框:temp = pd.DataFrame({"country": ["country A", "country A", "country A", "country A", "country B","country B","country B","country B", "country C", "country C", "country C", "country C"],
"city": ["city 1", "city 2", np.nan, "city 2", "city 3", "city 3", np.nan, "city 4", "city 5", np.nan, np.nan, "city 6"]})
我现在想要用剩余数据框中国家城市的众数来填充“city”列中的NaN值,例如对于国家A:城市1被提到一次;城市2被提到两次;因此,在索引为2的位置上用“city 2”填充“city”列。我已经完成了。
cities = [city for city in temp["country"].value_counts().index]
modes = temp.groupby(["country"]).agg(pd.Series.mode)
dict_locations = modes.to_dict(orient="index")
for k in dict_locations.keys():
new_dict_locations[k] = dict_locations[k]["city"]
现在有了国家和相应城市模式的值,我面临两个问题:
第一:情况'country C'是双峰的 - 关键字包含两个条目。我希望这个关键字能够平等地引用每个条目。真实数据集具有多个模式,因此它将是长度大于2的列表。
第二:我卡在了用与“new_dict_locations”中同一行的“country”单元格中的值对应的值替换“city”中的NaN值上。伪代码如下:“遍历‘city’列;如果您在位置‘temp [i,city]’处找到一个缺失的值,请将该行中的‘country’值(->‘country_tmp’)作为字典‘new_dict_locations’的键;如果键‘country_temp’的字典是一个列表,则从该列表中随机选择一个项目;取返回值(->‘city_tmp’)并用该值填充缺失值的单元格(temp[i,city])。
我已尝试使用不同的
.fillna()
和.replace()
组合(并阅读this和其他问题),但均无法解决。有人能给我指点吗?非常感谢。
(注:参考问题根据字典替换单元格中的值;然而,我的参考值在另一列中。)
**编辑** 执行
temp["city"].fillna(temp['country'], inplace=True)
和temp.replace({'city': dict_locations})
会给我一个错误:TypeError: unhashable type: 'dict'
(这个错误对于原始数据集是TypeError: unhashable type: 'numpy.ndarray'
,但我无法用示例重现它——如果有人知道区别的下落,我会非常高兴听到他们的想法。)