为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据熊猫中组合的最高出现次数填写值?

如何根据熊猫中组合的最高出现次数填写值?

BIG阳 2021-09-11 20:24:12
我有一个巨大的 df 看起来像这样 -...   ||    City     ||  Country           Newyork        USA           Newyork        USA           Newyork        USA           Newyork        **unknown**           delhi          india           delhi          **unknown**           delhi          india现在,我想根据已匹配的城市用正确的国家/地区填充未知数。例如,大多数带有 newyork 的行在 country 列中都是 USA。我的想法是按国家/地区分组并将其转换为字典以进行映射,但这种方法失败了。这是一个类似的问题,但解决方案是在 R 中: 根据发生概率填充缺失值
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

您可以使用每个组的value_counts第一个索引或第一个值:modereplace


def f(x):

    #remove '**unknown**' rows and get top1 value

    return x.replace('**unknown**', x[x.ne('**unknown**')].value_counts().index[0])

    #return x.replace('**unknown**', x[x.ne('**unknown**')].mode().iat[0])


df['Country'] = df.groupby('City')['Country'].apply(f)

print (df)

      City Country

0  Newyork     USA

1  Newyork     USA

2  Newyork     USA

3  Newyork     USA

4    delhi   india

5    delhi   india

6    delhi   india

另一种解决方案是替换**unknown**缺失值,获取最高值和fillna:


df['Country'] = df['Country'].replace('**unknown**', np.nan)


s = df.groupby('City')['Country'].transform(lambda x: x.value_counts().index[0])

#alternative

#s = df.groupby('City')['Country'].transform(lambda x: x.mode().iat[0])

df['Country'] = df['Country'].fillna(s)

print (df)

      City Country

0  Newyork     USA

1  Newyork     USA

2  Newyork     USA

3  Newyork     USA

4    delhi   india

5    delhi   india

6    delhi   india


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信