Есть ли краткий способ удаления строк в каждой группе объекта GroupBy? - PullRequest
0 голосов
/ 15 ноября 2018

Рассмотрим следующие данные, которые очень похожи на Pandas 'Group By Tutorial :

import pandas as pd
import numpy as np

df = pd.DataFrame({'Week' : [1, 2, 1, 2,
                                 1, 2, 1, 1],
                           'BloodType' : ['A+', 'AB', 'AB', 'B',
                                  'B', 'B+', 'AB', 'AB'],
                           'C' : np.random.randn(8),
                           'D' : np.random.randn(8)})

Это дает DataFrame, который выглядит следующим образом:

Sample Data

Я хочу сгруппировать по "Week", а затем применить некоторые операции только к столбцам C и D.Поэтому я попытался:

week_group = df.groupby('Week')
week_group.apply(lambda x: x.drop(["BloodType", "Week"], 1))

, который я изначально интерпретировал как для каждого DataFrame, опустите столбцы "BloodType" и "Week" и дайте мне полученную группу.Тем не менее, это дает мне:

Sample apply

Однако я бы ожидал, что это даст мне Group, где каждый индекс был DataFrameтолько с колонками C и D.Я не ожидал DataFrame.

Я попытался отключить apply с transform и agg, что дало:

ValueError: transform must return a scalar value for each group

и:

ValueError: cannot copy sequence with size 2 to array axis with dimension 5

соответственно.Существует ли относительно простое преобразование, которое может удалять строки по имени для каждого DataFrame в pandas Group и возвращать полученный Group объект (или выполнять операцию на месте)?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Исходя из ответа CJ59, я пришел к этому краткому решению:

week_group = week_group[df.columns.difference(["Week", "BloodType"])]
0 голосов
/ 15 ноября 2018

Возможно, вы ищете

for name, group in df.groupby('Week'):
    print(name, group.drop(columns=['Week', 'BloodType']))

1           C         D
0  0.496714 -0.469474
2  0.647689 -0.463418
4 -0.234153  0.241962
6  1.579213 -1.724918
7  0.767435 -0.562288
2           C        D
1 -0.138264  0.54256
3  1.523030 -0.46573
5 -0.234137 -1.91328
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...