[英]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.