我的数据集结构如下:
index country city Data
0 AU Sydney 23
1 AU Sydney 45
2 AU Unknown 2
3 CA Toronto 56
4 CA Toronto 2
5 CA Ottawa 1
6 CA Unknown 2
我想用每个国家/地区的城市发生方式替换“城市”列中的“未知”。结果将是:
...
2 AU Sydney 2
...
6 CA Toronto 2
我可以通过以下方式获得城市模式:
city_modes = df.groupby('country')['city'].apply(lambda x: x.mode().iloc[0])
我可以将值替换为:
df['column']=df.column.replace('Unknown', 'something')
但是我无法弄清楚如何将它们结合起来以仅根据城市的出现方式来替换每个国家的未知数。
有什么想法吗?
答案 0 :(得分:2)
将transform
用于Series
,其大小与原始DataFrame
相同,并通过numpy.where
设置新值:
city_modes = df.groupby('country')['city'].transform(lambda x: x.mode().iloc[0])
df['column'] = np.where(df['column'] == 'Unknown',city_modes, df['column'])
或者:
df.loc[df['column'] == 'Unknown', 'column'] = city_modes