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

请教根据熊猫数据帧分组并选择最常用的值

请教根据熊猫数据帧分组并选择最常用的值

开满天机 2019-11-05 09:04:46
根据熊猫数据帧分组并选择最常用的值我有一个有三个字符串列的数据框架。我知道,第三列中唯一的一个值对于前两列的每一个组合都是有效的。要清理数据,我必须按数据帧按前两列分组,并为每个组合选择第三列的最常用值。我的代码:import pandas as pdfrom scipy import stats source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'],                    'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],                   'Short name' : ['NY','New','Spb','NY']})print source.groupby(['Country','City']).                   agg(lambda x: stats.mode(x['Short name'])[0])最后一行代码不起作用,它写着“键错误‘短名称’”,如果我试图只按City分组,那么我就得到了AssertionError。我能做些什么来解决它?
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

你可以用value_counts()要获得一个计数系列,并获得第一行:

import pandas as pd

source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
                  'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
                  'Short name' : ['NY','New','Spb','NY']})source.groupby(['Country','City']).agg(lambda x:x.value_counts().index[0])



查看完整回答
反对 回复 2019-11-06
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

为agg,lambba函数将获得Series,它没有'Short name'属性。


stats.mode返回两个数组的元组,因此必须在这个元组中接受第一个数组的第一个元素。


通过这两个简单的更改:


source.groupby(['Country','City']).agg(lambda x: stats.mode(x)[0][0])

回报


                         Short name

Country City                       

Russia  Sankt-Petersburg        Spb

USA     New-York                 NY



查看完整回答
反对 回复 2019-11-06
  • 3 回答
  • 0 关注
  • 500 浏览
慕课专栏
更多

添加回答

举报

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