Создание столбца данных в результате Groupby и преобразования - PullRequest
1 голос
/ 13 апреля 2019

У меня есть данные из 4 столбцов textID, A, B, C

Я хотел бы создать объект groupby, а затем вычислить 5-й процентиль в столбце C, а затем добавить этот столбец (называемый «квантилем») обратно в исходный кадр данных.

У меня есть следующий код, который работает, когда groupby находится на одном столбце

df2['quantile']=df2.C.groupby(df2.itextID).transform(lambda x: 
x.quantile(q=0.5))

Вопрос 1: Как это можно расширить, чтобы объект groupby теперь использовал два столбца, т.е. textID & A?

Вопрос 2: Можно ли сначала создать объект groupby, а затем применить преобразование? т.е.

### Create groupby object Extract top 4 rows in each group
grp = df2.groupby('textID').head(4)
??? how to apply the transform to column C?

Спасибо

(Можно ли использовать обозначение в квадратных скобках вместо точки?)

1 Ответ

3 голосов
/ 13 апреля 2019

Используйте альтернативу с именами столбцов в списке внутри groupby и укажите столбцы после groupby для обработки transform или другой функции:

df2['quantile']= (df2.groupby(['itextID', 'A'])['C']
                     .transform(lambda x: x.quantile(q=0.5)))

Здесь grp - это DataFrame, а не groupby объект, потому что GroupBy.head return DataFrame:

grp = df2.groupby('textID').head(4)

Но возможно создать groupby объект, удалив .head(4):

grp = df2.groupby('textID')

А затем используйте head:

df = grp.head(4)

или transform:

df2['new'] = grp['C'].transform(lambda x: x.quantile(q=0.5))
...