2015-03-04 3 views
7

У меня есть строка кода:Python Панды GroupBy получить список групп

g = x.groupby('Color') 

Цвета красный, синий, зеленый, желтый, фиолетовый, оранжевый и черный. Как вернуть этот список? Для подобных атрибутов я использую x.Attribute, и он отлично работает, но x.Color не ведет себя одинаково.

+0

Значит, вам нужен список уникальных значений в цвете? –

+1

Вы можете получить уникальные значения из вашего исходного df, не нужно группировать 'x ['Color']. Unique()' – EdChum

+1

x ['Color']. Unique оказался именно тем, что я искал. Спасибо. – user3745115

ответ

1

Вот как это сделать.

groups = list() 
for g, data in x.groupby('Color'): 
    print(g, data) 
    groups.append(g) 

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

+2

В качестве альтернативы, если вы хотите получить уникальные значения, присутствующие в каждом столбце, вы можете сделать 'numpy.unique (x [col_name] .values)' – ericmjl

3

Насколько я понимаю, у вас есть Data Frame, который содержит кратные столбцы. Один из столбцов - «Цвет», который имеет разные типы цветов. Вы хотите вернуть список уникальных цветов, которые существуют.

colorGroups = df.groupby(['Color']) 
for c in colorGroups.groups: 
    print c 

Приведенный выше код предоставит вам все цвета, которые существуют, не повторяя названия цветов. Таким образом, вы должны получить выход, такие как:

Red 
Blue 
Green 
Yellow 
Purple 
Orange 
Black 

Альтернативой является unique() функцией, которая возвращает массив всех уникальных значений в серии. Таким образом, чтобы получить массив всех уникальных цветов, вы могли бы сделать:

df['Color'].unique() 

Выходной массив, так, например, print df['Color'].unique()[3] даст вам Yellow.

14

Существует гораздо более простой способ сделать это:

g = x.groupby('Color') 

g.groups.keys() 

Поступая groupby() панд возвращает вам Dict сгруппированных ДХ. Вы можете легко получить список ключей этого dict с помощью функции python, встроенной в функцию keys().

+0

Это гораздо более «pandorable», чем другие ответы. :) – Peaceful

5

Я хочу добавить это в качестве комментария к отвечу Yanqi Ma, но у меня пока нет репутации, чтобы комментировать.

Если вы не заботитесь о порядке групп, то ответ будет работать нормально:

g = x.groupby('Color') 
g.groups.keys() 
list(g.groups) # or this 

Однако, обратите внимание, что g.groups является словарем, так ключи неотъемлемо неупорядоченные! Это так, даже если вы используете sort=True по методу groupby для сортировки групп, что по умолчанию равно true.

Это на самом деле немного меня укусило, когда на двух платформах это привело к другому порядку, тем более что я использовал вторую форму выше, поэтому сначала не было очевидно, что g.groups был dict.

На мой взгляд, лучший способ сделать это, чтобы воспользоваться тем фактом, что GroupBy object has an iterator, и использовать список понимание для возвращения группы в порядке, они существуют в объекте GroupBy:

g = x.groupby('Color') 
groups = [name for name,unused_df in g] 

Это немного менее читаемо, но это всегда будет возвращать группы в правильном порядке.

Смежные вопросы