我有如下数据
year name percent sex
1880 John 0.081541 boy
1881 William 0.080511 boy
1881 John 0.050057 boy
我需要使用不同的列进行分组和计数
df_year = df.groupby('year').count()
df_name = df.groupby('name').count()
df_sex = df.groupby('sex').count()
然后我必须创建一个窗口来获取每列的前3个数据
window = Window.partitionBy('year').orderBy(col("count").desc())
top4_res = df_year.withColumn('topn', func.row_number().over(window)).\
filter(col('topn') <= 4).repartition(1)
假设我有数百列要分组、计数和topk\u3操作。
我能一次做完吗?
还是有更好的方法?
2条答案
按热度按时间8qgya5xd1#
如果希望列的前n个值具有最大的计数,则应该这样做:
g6ll5ycj2#
我不确定这是否能满足你的要求,但如果你是一个单一的Dataframe,我想它可以给你一个开始,让我知道如果不是。您可以堆叠这3列(或更多列),然后按groupby和take count:
如果你想要一个宽的形式,你也可以旋转,但我认为长的形式会很有帮助: