根據熊貓數據幀分組并選擇最常用的值我有一個有三個字符串列的數據框架。我知道,第三列中唯一的一個值對于前兩列的每一個組合都是有效的。要清理數據,我必須按數據幀按前兩列分組,并為每個組合選擇第三列的最常用值。我的代碼: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])

慕尼黑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
添加回答
舉報
0/150
提交
取消