簡體   English   中英

熊貓-在MultiIndex DataFrame中使用最頻繁的值進行堆疊

[英]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代碼,然后對每個GridCodeUser數量進行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM