熊猫groupby根据条件替换

时间:2018-09-24 12:31:14

标签: python pandas

我的数据集结构如下:

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 个答案:

答案 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