Как установить одинаковую частоту для всех уникальных значений, найденных в кадре данных Pandas? - PullRequest
1 голос
/ 14 октября 2019

У меня есть Pandas DataFrame, который имеет 2 столбца: один для категории (PROBLEM_TYPE) и один для описания категории. Очевидно, что значение значения описания различно для каждой категории, но, поскольку я планирую обучить модель на основе этого DataFrame, я пытаюсь установить одинаковое количество значений для каждой категории. Таким образом, моя модель будет более точной.

DataFrame:

filtered_df.head()

    PROBLEM_TYPE    DESCRIPTION
0   problem_type1   blabla...
1   problem_type1   blablablabla...
2   problem_type3   bla...
3   problem_type7   blablabloblo...
4   problem_type2   blobloble...

Это то, что я получаю, когда вызываю функцию value_counts():

filtered_df["PROBLEM_TYPE"].value_counts()

problem_type1            141887
problem_type2             21663
problem_type3             19349
problem_type4             15710
problem_type5              5229
problem_type6              5161
problem_type7              4682
problem_type8              3672
problem_type9              3296
problem_type10             3131
Name: PROBLEM_TYPE, dtype: int64

AsВы можете увидеть там 10 различных типов проблем (категорий), и каждый из них имеет различное количество значений. У меня вопрос, как установить одинаковое количество значений для всех типов проблем. Например, каждый тип проблемы будет иметь минимальное количество значений в кадре данных (равное 3131).

Другими словами, как установить частоту каждой категории, чтобы она была одинаковой, поэтому в следующий раз язапустите функцию value_counts(), это будет выглядеть примерно так:

filtered_df["PROBLEM_TYPE"].value_counts()

problem_type1              3131
problem_type2              3131
problem_type3              3131
problem_type4              3131
problem_type5              3131
problem_type6              3131
problem_type7              3131
problem_type8              3131
problem_type9              3131
problem_type10             3131
Name: PROBLEM_TYPE, dtype: int64

Заранее спасибо.

1 Ответ

0 голосов
/ 14 октября 2019

Вы можете сделать следующее:

mi = df["PROBLEM_TYPE"].value_counts().min()
df_filtered = df.sample(frac=1).groupby("PROBLEM_TYPE").head(mi)

В этом решении есть два шага, найти "PROBLEM_TYPE" с минимальным количеством:

mi = df["PROBLEM_TYPE"].value_counts().min()

Затем перетасовать строки вашего фрейма данных ивозьмите первые ми в каждой группе:

df_filtered = df.sample(frac=1).groupby("PROBLEM_TYPE").head(mi)

См. здесь для обсуждения того, как перетасовать кадр данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...