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