как извлечь определенные строки с условием?

#python #pandas #dataset

#python #панды #набор данных

Вопрос:

Я работаю с набором данных, который содержит в своем первом столбце метки эмоций или категорий. Однако, поскольку набор данных несбалансирован, мне нужно извлечь одинаковое количество строк для каждой категории. То есть, если есть 10 категорий, мне нужно выбрать только 100 выборок строк из каждой из этих категорий. Результатом будет 1000 выборок строк.

Что я пробовал:

 def append_new_rows(df, new_df, s):
    c = 0
    for index, row in df.iterrows():
        if s == row[0]:
            if c <= 100:
                new_df.append(row)
                c  = 1
    return df_2

for s in sorted(list(set(df.category))):
    new_df = append_new_rows(df, new_df, s)
  

Набор данных

 ----------------------------
| category | A  | B  | C | D |
----------------------------
| happy    | ...| ...|...|...|
| ...      | ...| ...|...|...|
| sadness  | ...| ...|...|...|
  

Ожидаемый результат

 ----------------------------
| category | A  | B  | C | D |
----------------------------
| happy    | ...| ...|...|...|
... 100 samples of happy
| ...      | ...| ...|...|...|
| sadness  | ...| ...|...|...|
... 100 samples of sadness
...
...
1000 sampple rows
  

Ответ №1:

 def append_new_df(df, df_2, s, n):
    c = 1
    for index, row in df.iterrows():
        if s == row[0]:
            if c <= n:
                df_2 = df_2.append(row)
                c  = 1
    return df_2
  

вы просто там, вам просто нужно сделать что-то вроде этого