使用交叉表时排序和删除值

问题描述 投票:0回答:2

所以我有一个熊猫课程的作业,但我无法理解如何正确地做到这一点。作业给了我这个巨大的数据文件,其中包含显示数据的各种列,它看起来像这样:

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 个缔约方是使用交叉表函数的列。

我知道我首先必须对数据帧进行排序,然后才能使用交叉表,但如果我使用其他任何东西,那么只是最基本的交叉表功能就会给我错误。我还知道前 10 名政党应该是唯一的,所以我猜想在某些时候我必须使用 unique 函数,但它只返回一个数组,在该数组中我无法再将年份连接到它们。向前跳过 4 小时:我现在尝试使用 groupby 函数、sort_values 函数和 unique 函数,但似乎无法让它们正常工作。因此,为了让自己保持理智,我请求你们帮助我让它发挥作用,或者至少解释一下为什么我无法让它发挥作用。

python pandas crosstab
2个回答
1
投票

如果我理解正确的话,您想要按多年来提出更多问题的前 10 位参与者进行筛选,对吗? 如果是这样,您可以使用以下方法确定问题最多的前 10 个各方:

top10 = df.groupby('Parties')['Question'].count().nlargest(10).index

然后,您可以过滤数据框以仅包含具有以下特征的各方:

df_top10 = df[df['Parties'].isin(top10)]

此时,您可以根据此过滤后的数据帧构建交叉表。


0
投票

new_df = pd.crosstab(df['Year'],df['Parties']).stack().reset_index(name='Freq').sort_values(by=['Freq'], ascending = False) new_df.loc[new_df['Freq'] != 0]

© www.soinside.com 2019 - 2024. All rights reserved.