如何从每列中选择最常见的常见值

时间:2021-06-29 04:56:27

标签: python pandas

我有大发框架

connect

喜欢在下面获取DataFrame:

const performers = await prisma.performer.findMany()

const event = await prisma.event.create({
      data: {
        performers: {
          connect: performers.map((p) => ({ id: p.id })),
        }
      },
      include: {
        performers: true,
      },
});

我设法使用以下命令从每一列中获取最高值,但不确定如何从那里到达所需的 DataFrame。试图找到处理这种情况的最佳方法。

Col1 Col2 Col3 Col4
A     B     C   OP
B     D     A   JK
B     C     E   MK
A     B     B   LO

2 个答案:

答案 0 :(得分:2)

stackvalue_counts() 然后可以重命名列

 df.stack().value_counts().head(3).to_frame('Total')

如果您需要根据您的评论过滤列。

cols=['Col1', 'Col2', 'Col3']
df.loc[:,cols].stack().value_counts().head(3).to_frame('Total')

答案 1 :(得分:2)

使用 DataFrame.melt 指定 value_vars 中的列,然后按 GroupBy.sizeSeries.nlargest 计算值,最后将 Series 转换为 DataFrame:< /p>

df1 = (df.melt(value_vars=['Col1','Col2','Col3'], value_name='Result')
         .groupby(['Result'])
         .size()
         .nlargest(3)
         .reset_index(name='Total'))
print (df1)
  Result  Total
0      B      5
1      A      3
2      C      2

或者将 Series.value_countsSeries.head 一起用于 top3:

df1 = (df.melt(value_vars=['Col1','Col2','Col3'], value_name='Result')['Result']
        .value_counts()
        .head(3)
        .rename_axis('Result')
        .reset_index(name='Total'))
print (df1)
  Result  Total
0      B      5
1      A      3
2      C      2