我的数据集结构如下:
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')
但我无法弄清楚如何将这些结合起来,仅根据城市的发生模式来替换每个国家的未知数。
有什么想法吗?
最佳答案
使用transform
对于与原始 DataFrame
大小相同的 Series
并通过 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
关于python - pandas groupby 根据条件替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479492/