Вы можете сделать что-то вроде
new_gb = pandas.concat([ gb.get_group(group) for i,group in enumerate(gb.groups) if i < 5 ]).groupby('model')
new_gb.hist()
Хотя, я бы подойти к нему по-другому , Вы можете использовать collections.Counter
объект, чтобы получить группы быстро:
import collections
df = pandas.DataFrame.from_dict({'model': pandas.np.random.randint(0, 3, 10), 'param1': pandas.np.random.random(10), 'param2':pandas.np.random.random(10)})
# model param1 param2
#0 2 0.252379 0.985290
#1 1 0.059338 0.225166
#2 0 0.187259 0.808899
#3 2 0.773946 0.696001
#4 1 0.680231 0.271874
#5 2 0.054969 0.328743
#6 0 0.734828 0.273234
#7 0 0.776684 0.661741
#8 2 0.098836 0.013047
#9 1 0.228801 0.827378
model_groups = collections.Counter(df.model)
print(model_groups) #Counter({2: 4, 0: 3, 1: 3})
Теперь вы можете перебрать Counter
объект как словарь, и запрос группы, которые вы хотите:
new_df = pandas.concat([df.query('model==%d'%key) for key,val in model_groups.items() if val < 4 ]) # for example, but you can select the models however you like
# model param1 param2
#2 0 0.187259 0.808899
#6 0 0.734828 0.273234
#7 0 0.776684 0.661741
#1 1 0.059338 0.225166
#4 1 0.680231 0.271874
#9 1 0.228801 0.827378
Теперь вы можете использовать встроенный -в pandas.DataFrame.groupby
функция
gb = new_df.groupby('model')
gb.hist()
с model_groups
содержит все группы, вы можете просто выбрать из него, как вы хотите.
примечание
model
Если столбец содержит строковые значения (имена или что-то) вместо целых чисел, все это будет работать так же - просто измените аргумент запроса от 'model==%d'%key
к 'model=="%s"'%key
.
Выбор первых n групп немного расплывчато, возможно, вы имеете в виду **, как вы можете присоединить первые n групп к единому файловому кадру ** .. что-то вдоль этих строк? А также, как бы вы хотели выбрать группы? Случайно или в зависимости от населения группы и т. Д.? – dermen
На данный момент я просто выбираю их по их заказу, немного похоже на использование head() или tail() только для того, чтобы иметь представление о том, как выглядят данные.Я думаю, что мой метод уже присоединяется к первым группам в одном фреймворке данных, но было бы неплохо и более эффективное решение – lib
, вы можете получить группы, просто позвонив в раздел «gp.groups»: http: //pandas.pydata.org /pandas-docs/stable/generated/pandas.core.groupby.GroupBy.groups.html#pandas.core.groupby.GroupBy.groups, вам может быть лучше просто отфильтровать ваш df, поэтому df_filt = df [df ['model '] .isin (df [' model ']. unique() [: 5])] 'then' gb = df_filt.groupby (' model ') '#rest кода такой же, как раньше – EdChum