开发者问题收集

pandas groupby 根据条件进行替换

2018-09-24
1560

我有如下数据集结构:

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')

但我不知道如何将它们组合起来,以便仅根据城市出现模式替换每个国家的未知数。

有什么想法吗?

1个回答

Series 使用 transform ,大小与原始 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 
jezrael
2018-09-24