python - pandas groupby 根据条件替换

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

但我无法弄清楚如何将这些结合起来,仅根据城市的发生模式来替换每个国家的未知数。

有什么想法吗?

最佳答案

使用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/

相关文章:

python - Pandas Dataframe 按两列分组并总结一列

python - 如何将 Pandas 日期时间列的时间更改为午夜?

python - Python 中的类继承、 super 方法和重写方法

python - 如何使用curses 和Python 设置窗口背景颜色?

python - 进行 groupby 时保留其他列

python - 多列pandas向量化字符串函数?

python - 将数据拆分为训练/测试文件,以便为这两个文件至少选取一个样本

python - 遍历类的字典时如何返回类值

python - 如何从 2 个 pkl 文件创建 Python 嵌套字典/将 2 个嵌套字典合并为一个?

python - Pandas DataFrame 多索引重新索引列不起作用