Python 使用交叉表时对值进行排序和删除

Python 使用交叉表时对值进行排序和删除,python,pandas,crosstab,Python,Pandas,Crosstab,因此,我有一个熊猫课程的作业,我无法思考如何正确地去做。分配给我的是一个巨大的数据文件,其中有各种列显示数据,如下所示: Document Year Parties Question Ministry x1021.xml 1995 D66 What does... Ministry of Safety x1022.xml 1995 CDA When do we... Ministry of Culture x1023.xml 1995 PvdA

因此,我有一个熊猫课程的作业,我无法思考如何正确地去做。分配给我的是一个巨大的数据文件,其中有各种列显示数据,如下所示:

Document   Year Parties Question       Ministry
x1021.xml  1995 D66     What does...   Ministry of Safety
x1022.xml  1995 CDA     When do we...  Ministry of Culture
x1023.xml  1995 PvdA    When can we... Ministry of Agriculture
这种情况持续了数千行。第一个练习告诉我做一个列的交叉表:年份和政党,年份是索引,政党是列。这一点也不难,只需要一行代码:

pd.crosstab(index=df['Year'], columns=df['Parties'])
但下一个问题让我想起了:现在使用原始数据框,创建一个新的数据框,以年份为索引,只有前10位提问最多的参与者是使用交叉表功能的列。


我知道在使用交叉表之前,我首先必须对数据帧进行排序,但是如果我使用其他任何东西,那么最基本的交叉表函数就会给我错误。我也知道前十名应该是唯一的,所以我猜在某个时候我必须使用unique函数,但它只返回一个数组,在这个数组中我无法再将年份与它们连接起来。向前跳过4个小时:我现在尝试使用groupby函数、sort_values函数和unique函数,但似乎无法让它们正常工作。所以为了让自己保持清醒,我请你们帮我把这件事做好,或者至少解释一下为什么我不能把它做好。

如果我理解正确的话,你们想通过前10位多年来问了更多问题的人来筛选,对吗

如果是这样,您可以使用以下方法确定问题最多的前10方:

top10 = df.groupby('Parties')['Question'].count().nlargest(10).index
然后,您可以过滤数据帧,使其仅包括以下各方:

df_top10 = df[df['Parties'].isin(top10)]
此时,您可以从过滤后的数据帧构建交叉表