根据熊猫数据帧分组并选择最常用的值我有一个有三个字符串列的数据框架。我知道,第三列中唯一的一个值对于前两列的每一个组合都是有效的。要清理数据,我必须按数据帧按前两列分组,并为每个组合选择第三列的最常用值。我的代码: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 回答
largeQ
TA贡献2039条经验 获得超7个赞
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])
杨__羊羊
TA贡献1943条经验 获得超7个赞
为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
添加回答
举报
0/150
提交
取消