pandas мультииндекс - удалить строки на основе номера субиндекса - PullRequest
2 голосов
/ 28 января 2020

Вот мой фрейм данных:

df = pd.DataFrame(pd.DataFrame({"C1" : [0.5, 0.9, 0.1, 0.2, 0.3, 0.5, 0.2], 
                            "C2" : [200, 158, 698, 666, 325, 224, 584], 
                            "C3" : [15, 99, 36, 14, 55, 62, 37]},
                           index = pd.MultiIndex.from_tuples([(0,0), (1,0), (1,1), (2,0), (2,1), (3,0), (4,0)], 
                                                         names=['L1','L2'])))

df:

         C1      C2     C3
L1  L2          
0   0   0.5     200     15
1   0   0.9     158     99
    1   0.1     698     36
2   0   0.2     666     14
    1   0.3     325     55
3   0   0.5     224     62
4   0   0.2     584     37

Я хотел бы сохранить строки, которые имеют только одно значение в субиндексе L1 (0 в этом случае) в Чтобы получить что-то подобное:

         C1      C2     C3
L1  L2          
0   0   0.5     200     15
3   0   0.5     224     62
4   0   0.2     584     37

Пожалуйста, не могли бы вы дать мне знать, если у вас есть какие-либо подсказки для решения этой проблемы?

С уважением

1 Ответ

3 голосов
/ 28 января 2020

Используйте GroupBy.transform по первому уровню для любого столбца с GroupBy.size, сравните по Series.eq и отфильтруйте по boolean indexing :

df1 = df[df.groupby(level=0)['C1'].transform('size').eq(1)]

Или извлеките индекс первого уровня с помощью Index.get_level_values и отфильтруйте с помощью инвертированной маски значение ~ с Index.duplicated и keep=False для всех парней:

df1 = df[~df.index.get_level_values(0).duplicated(keep=False)]
...