Проход по индексу сгруппированных данных панд - PullRequest
0 голосов
/ 26 апреля 2018

Борясь с новичком, мы пытаемся перечислить элементы сгруппированного информационного кадра. Чтобы выделить проблему, см. Упрощенный пример ниже. Сначала сгруппируйте предметы:

data = {'colour': ['red','purple','green','purple','blue','red'], 'item': ['hat','scarf','belt','belt','hat','scarf'], 'material': ['felt','wool','leather','wool','plastic','wool']}  
df = pd.DataFrame(data=data)
grpd_df = df.groupby(df['item']).apply(lambda df:df.reset_index(drop=True))
grpd_df

          colour  item material
item

belt   0  green   belt  leather 
       1 purple  belt  wool 

hat    0 red     hat   felt 
       1 blue    hat   plastic 

scarf  0 purple  scarf wool 
       1 red     scarf wool 

Затем найдите все строки с красным элементом

df = grpd_df[grpd_df['colour'].eq('red').groupby(level=0).transform('any')]
print (df)

          colour   item material
item                           
hat    0     red    hat     felt
       1    blue    hat  plastic
scarf  0  purple  scarf     wool
       1     red  scarf     wool

Затем мы хотели бы перебрать список предметов в шапке и шарфе grpd_df. Мы попробовали df.index.levels, но при этом выводятся все элементы, включая ремень.

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете использовать IndexSlice и get_level_values, чтобы достичь этого.

grpd_df.loc[pd.IndexSlice[list(set(df.index.get_level_values(0).tolist())),:]]
Out[302]: 
         colour   item material
item                           
hat   0     red    hat     felt
      1    blue    hat  plastic
scarf 0  purple  scarf     wool
      1     red  scarf     wool

Если нужен уровень индекса от df

set(df.index.get_level_values(0).tolist())
Out[303]: {'hat', 'scarf'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...