Перебирать уникальные значения для целей аудита? - PullRequest
0 голосов
/ 09 апреля 2020

Скажем, у нас есть список уникальных категорий в кадре данных df2:

categories = df2['Category'].unique()

Я хочу провести l oop через каждую категорию в df2, сопоставить ее с переменными категориями выше и применить лямбда-функцию , Какой будет синтаксис?

Я пробовал следующее:

df2.loc[df2.Category == categories, :].apply(lambda x: x.sample(n=3) if 
x.size*0.01 < 3 else x.sample(frac=0.01))

предположительно, приведенный выше код должен проходить через каждую категорию в категориях и возвращать все элементы в этой категории, верно? Или я что-то упустил? Я получаю следующую ошибку:

ValueError: Lengths must match to compare. 

Я получаю ошибку, я думаю, потому, что df.Category длиннее категорий, потому что df.Category - это список всех категорий, которые являются дубликатами. Вот почему я попробовал .unique (). Есть ли способ исправить эту проблему, чтобы мой код работал? Спасибо за ваше время.

1 Ответ

1 голос
/ 10 апреля 2020

Вот что я предлагаю:

# I reproduce the dataset
import pandas as pd
import numpy as np
np.random.seed(123)
df1 = pd.DataFrame({"Category": np.arange(0, 20).repeat(5),
                   "value": np.random.random(20*5)})
df2 = pd.DataFrame({"Category": np.arange(20, 40).repeat(500),
                   "value": np.random.random(20*500)})
df = pd.concat([df1,df2]) # I concat these two to get varying category sizes


df2 = (df.groupby("Category").apply(lambda x: x.sample(n=3) if x.size*0.01 < 3 
                                                            else x.sample(frac=0.01))
                             .drop(columns="Category"))

Вы видите, что вы получаете мультииндекс с категорией и индексами наблюдений в выборке для каждой категории. У вас есть выборка 3 для категории от 0 до 19 и выборка 5 для вышеуказанных категорий.

               value
Category            
0        1  0.286139
         4  0.719469
         2  0.226851
1        9  0.392118
         7  0.684830
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...