我有一个很大的df,看起来像这样-
... || City || Country
Newyork USA
Newyork USA
Newyork USA
Newyork **unknown**
delhi india
delhi **unknown**
delhi india
现在,我想根据已经匹配的城市,用正确的国家来填写未知数。例如,与纽约的大多数行都是美国的“国家”列。
我的想法是按国家分组,并将其转换成一本字典来绘制地图,但这种做法失败了。
下面是一个类似的问题,但答案是R:
Fill missing value based on probability of occurrence
最佳答案
您可以使用value_counts
和第一个索引,或者每个mode
组的第一个值replace
:
def f(x):
#remove '**unknown**' rows and get top1 value
return x.replace('**unknown**', x[x.ne('**unknown**')].value_counts().index[0])
#return x.replace('**unknown**', x[x.ne('**unknown**')].mode().iat[0])
df['Country'] = df.groupby('City')['Country'].apply(f)
print (df)
City Country
0 Newyork USA
1 Newyork USA
2 Newyork USA
3 Newyork USA
4 delhi india
5 delhi india
6 delhi india
另一个解决方案是将
**unknown**
替换为缺少的值,获取最大值并fillna
:df['Country'] = df['Country'].replace('**unknown**', np.nan)
s = df.groupby('City')['Country'].transform(lambda x: x.value_counts().index[0])
#alternative
#s = df.groupby('City')['Country'].transform(lambda x: x.mode().iat[0])
df['Country'] = df['Country'].fillna(s)
print (df)
City Country
0 Newyork USA
1 Newyork USA
2 Newyork USA
3 Newyork USA
4 delhi india
5 delhi india
6 delhi india