Группировка таблиц в Python - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть таблица, которая выглядит так -

 Car           Model
 ----          ---------
 Chevy         Suburban
 Buick         Skyhawk
 Mercedes      C300
 Chevy         Impala
 Chevy         Traverse
 Mercedes      C300
 Buick         Enclave
 Chevy         Suburban
 Buick         Skyhawk

Я хочу отсортировать эту таблицу так, чтобы она выглядела следующим образом -

 Manufacturer         Model        Count
 -----------          -----        -----
 Chevy                Suburban     2
 Chevy                Impala       1
 Chevy                Traverse     1

 Buick                Skyhawk      2
 Buick                Enclave      1

 Mercedes             C300         2

В основном, что должно произойти здесь, это Производитель должен быть отсортирован, а затем модели от каждого производителя должны быть отсортированы в порядке убывания .... Я пробовал несколько способов сделать это с Pandas, и ничего, что я пробовал, работало .... Любые мысли ??

1 Ответ

0 голосов
/ 19 апреля 2020

Если вы хотите, чтобы Производитель был отсортирован по количеству Моделей:

out_df = df.rename(columns={"Car": "Manufacturer"}) \
    .groupby(["Manufacturer", "Model"]).agg(Count=("Model", "count")).reset_index() \
    .sort_values(by=["Manufacturer", "Count"], ascending=[True, False])
out_df["Count_per_Manufacturer"] = out_df.groupby("Manufacturer")["Count"].transform("sum")
out_df = out_df.sort_values(by=["Count_per_Manufacturer", "Count"], ascending=[False, False]) \
    .drop(columns=["Count_per_Manufacturer"])

Если вы хотите, чтобы Производитель был отсортирован по алфавиту:

out_df = df.rename(columns={"Car": "Manufacturer"}) \
    .groupby(["Manufacturer", "Model"]).agg(Count=("Model", "count")).reset_index() \
    .sort_values(by=["Manufacturer", "Count"], ascending=[True, False])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...