我有大发框架
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
答案 0 :(得分:2)
stack
和 value_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.size
和 Series.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_counts
与 Series.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