Python 在Pandas或Pyspark数据帧中将每个bigram从列表格式移动到新行

Python 在Pandas或Pyspark数据帧中将每个bigram从列表格式移动到新行,python,pandas,apache-spark,text,pyspark,Python,Pandas,Apache Spark,Text,Pyspark,我有pandas和pyspark数据帧,每天每行都有bigram列表。我想打破列表,将每个二元图移动到一行,按降序排列计数 如下所示是我拥有的数据帧。我已按事件分类。在“合并”列中,显示了BIGRAM列表。例如,“见面愉快”和“见面后付费”是两个大字。每天都会有大人物的名单 现在我想在同一日期将每个双格移到新行。例如,“nice METE”将在一行中,“METE postpaid”将在另一行中,而event_dt列显示相同的日期。我还需要按降序排列的双随机数,还需要每个日期的前10或前20个双

我有pandas和pyspark数据帧,每天每行都有bigram列表。我想打破列表,将每个二元图移动到一行,按降序排列计数

如下所示是我拥有的数据帧。我已按事件分类。在“合并”列中,显示了BIGRAM列表。例如,“见面愉快”和“见面后付费”是两个大字。每天都会有大人物的名单

现在我想在同一日期将每个双格移到新行。例如,“nice METE”将在一行中,“METE postpaid”将在另一行中,而event_dt列显示相同的日期。我还需要按降序排列的双随机数,还需要每个日期的前10或前20个双随机数。 我想让它看起来像

正如您所看到的,每一个二元图都是以相同日期的计数排成一行的。第一行显示了“客户关怀”二元图,因为这个二元图是pyspark/pandas计算的20倍(我需要帮助!)
提前感谢您的帮助

我想你需要这样的东西:

from pyspark.sql.functions import explode

df_res = (df
         .select('event_dt', explode('merged').alias('bigram'))
         .groupBy('event_dt', 'bigram')
         .count()
         )
df_res.show()
请注意,使用此代码,如果您在两个不同的日子里有“客户关怀”,那么我的版本将分别计算它们,并且您将发现它出现的每一天都有一行

更新

如果要查看每个组中的前n个,应执行以下操作:

from pyspark.sql.functions as f
from pyspark.sql.window import Window

n = 10
win = Window.partitionBy('event_dt').orderBy(f.desc('count'))

(df_res
 .withColumn('rank', f.row_number().over(win))
 .filter('rank<=' + str(n))
 .show()
)
pyspark.sql中的
函数作为f
从pyspark.sql.window导入窗口
n=10
win=Window.partitionBy('event_dt').orderBy(f.desc('count'))
(df_res)
.withColumn('rank',f.row_number().超过(win))

.filter('rankThanks'谢谢你的回复。我收到一个关于'merged'列的错误。我认为这两个组都不工作。对workable.df_res=df进行了一些更改。select('event_dt',explode(col('merged'))。alias('bigrams')@Nadyou我更新了答案,这能解决你的问题吗?谢谢!!这很有帮助。