Сортировка и удаление значений при использовании кросс-таблицы - PullRequest
3 голосов
/ 30 января 2020

Итак, у меня есть задание для курса pandas, и я не могу обернуться, как можно go сделать это правильно. Назначение дает мне этот огромный файл данных со всеми видами столбцов, отображающих данные, он выглядит так:

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 Сторон, которые задали большинство вопросов, были столбцы, использующие функцию кросс-таблицы.

Я понимаю, что сначала я должен отсортировать информационный кадр, прежде чем я смогу использовать кросс-таблицу, но если я использую что-то еще, то просто самая базовая c функция кросс-таблицы, она дает мне ошибки. Я также понимаю, что первые 10 партий должны быть уникальными, поэтому я предположил, что в какой-то момент мне пришлось использовать уникальную функцию, но она возвращает только массив, в котором я больше не могу связать с ними годы. Переход вперед на 4 часа: теперь я попытался использовать функцию groupby, функцию sort_values ​​и уникальную функцию, но, похоже, я не могу заставить их работать должным образом. Поэтому, чтобы оставаться в здравом уме, я прошу вас, ребята, помочь мне заставить это работать или хотя бы объяснить, почему я не могу заставить его работать.

1 Ответ

1 голос
/ 30 января 2020

Если я правильно понимаю, вы хотите отфильтровать по 10 лучшим сторонам, которые задавали больше вопросов за все годы , правильно?

Если это так, вы можете идентифицировать первые 10 партий по большинство вопросов с использованием:

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

Затем вы можете отфильтровать свой фрейм данных, чтобы включить в него только те стороны, у которых:

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

На этом этапе вы можете построить кросс-таблицу из этого отфильтрованного фрейма данных.

...