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

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

我有一个有三个字符串列的数据框架。我知道,第三列中唯一的一个值对于前两列的每一个组合都是有效的。要清理数据,我必须按数据帧按前两列分组,并为每个组合选择第三列的最常用值。

我的代码:

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。我能做些什么来解决它?


互换的青春
浏览 544回答 3
3回答

largeQ

你可以用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])

杨__羊羊

为agg,lambba函数将获得Series,它没有'Short name'属性。stats.mode返回两个数组的元组,因此必须在这个元组中接受第一个数组的第一个元素。通过这两个简单的更改:source.groupby(['Country','City']).agg(lambda x: stats.mode(x)[0][0])回报                         Short nameCountry City                       Russia  Sankt-Petersburg        SpbUSA     New-York                 NY
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python