我有一个非常大的数据框(成千上万的行),但让我们假设它是这样的:
A B C D E F
0 2 5 2 2 2 2
1 5 2 5 5 5 5
2 5 2 5 2 5 5
3 2 2 2 2 2 2
4 5 5 5 5 5 5
我需要查看在每行的一组列中哪个值出现频率最高。例如,最常出现在ABC列和每行DEF列中的值,然后将它们放在另一列中。在此示例中,我的预期输出是
ABC DEF
2 2
5 5
5 5
2 2
5 5
如何在Python中完成呢??? 谢谢!
答案 0 :(得分:8)
这是使用列groupby
mapperd={'A':'ABC','B':'ABC','C':'ABC','D':'DEF','E':'DEF','F':'DEF'}
df.groupby(mapperd,axis=1).agg(lambda x : x.mode()[0])
Out[826]:
ABC DEF
0 2 2
1 5 5
2 5 5
3 2 2
4 5 5
答案 1 :(得分:4)
为了获得良好的性能,您可以使用基础的numpy数组,并使用scipy.stats.mode
计算模式:
from scipy import stats
cols = ['ABC','DEF']
a = df.values.reshape(-1, df.shape[1]//2)
pd.DataFrame(stats.mode(a, axis=1).mode.reshape(-1,2), columns=cols)
ABC DEF
0 2 2
1 5 5
2 5 5
3 2 2
4 5 5
答案 2 :(得分:3)
您尝试使用列标题索引过滤:
grp = ['ABC','DEF']
pd.concat([df.loc[:,[*g]].mode(1).set_axis([g], axis=1, inplace=False) for g in grp], axis=1)
输出:
ABC DEF
0 2 2
1 5 5
2 5 5
3 2 2
4 5 5