Сделать DataFrame сбалансированным по отношению к конкретному столбцу - PullRequest
0 голосов
/ 22 октября 2018

У меня есть DataFrame в Python, который выглядит следующим образом.

  Text  Label
0  abc      0
1  def      1
2  ghi      1
3   .       .
4   .       .
5   .       .

Есть 100 строк с меткой «1» и только 50 с меткой «0».Я хотел бы иметь сбалансированный набор, чтобы было 50 строк с меткой «0» и 50 строк с меткой «1».Неважно, какие строки с меткой '1' выбрасываются.

Есть ли какой-нибудь краткий способ написать это на Python?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вы должны быть в состоянии использовать голову:

DataFrame.head(50)

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html#

0 голосов
/ 22 октября 2018

Используйте groupby и head:

df = df.groupby('Label').head(50)

Это займет первые 50 из каждого подмножества строк, где метка равна 0 и 1 соответственно.В случае строк с меткой 1 выбираются первые 50, а остальные отбрасываются.

Чтобы выбрать последние 50, замените head(50) на tail(50).

Чтобы выбрать 50 случайных строк, используйте apply + sample:

df = (df.groupby('Label', as_index=False)
        .apply(lambda x: x.sample(n=50))
        .reset_index(drop=True))

Обратите внимание, что если в какой-либо из групп будет меньше N (= 50) элементов, это не будет работать.

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