[英]pandas - unstack with most frequent values in MultiIndex DataFrame
我有這個樣本DataFrame df
:
GridCode,User,DLang
3,224591119,es
3,224591119,ja
3,224591119,zh
4,224591119,es
6,146381773,en
9,17925282,ca
我想對User
字段進行分組,僅保留最頻繁的DLang
代碼,然后對每個GridCode
的User
數量進行GridCode
和計數。 到目前為止,我做到了:
d = df.groupby(['GridCode','DLang']).size().unstack().fillna(0)
正確返回:
DLang ca en es ja zh
GridCode
3 0 0 1 1 1
4 0 0 1 0 0
6 0 1 0 0 0
9 1 0 0 0 0
但是,正如您在df
看到的那樣,某些用戶具有多個DLang
條目(例如,用戶224591119),但是我只想計算他們最頻繁的DLang
代碼(例如,對於該用戶,它是es
)。 結果數據框將是:
DLang ca en es
GridCode
3 0 0 1
4 0 0 1
6 0 1 0
9 1 0 0
首先,計算特定DLang
發生次數,取平均值為GridCode
。
g = df.groupby(['User','DLang']).count().reset_index()
g = g.rename(columns={'GridCode':'occurrences'})
然后,使用first()
函數查找每個用戶的最頻繁/最大出現次數。
h = g.groupby('User').first().reset_index()
僅將最頻繁/最大出現次數df與原始輸入合並。 這將刪除用戶使用DLang
而不是最頻繁的行
j = pd.merge(df,h, on=['User','DLang'])
最后,對所有用戶進行平均,以得出最終結果。
final_df = j.groupby(['GridCode','DLang']).size().unstack().fillna(0)
DLang ca en es
GridCode
3 0 0 1
4 0 0 1
6 0 1 0
9 1 0 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.