применять арифметические и операторы сравнения к объекту groupby - PullRequest
0 голосов
/ 07 мая 2018

У меня есть следующий фрейм данных (df):

ID  Age Code
1111    66  C18.2
1111    66  C98.4
1111    66  I50
1111    66  D20
1112    45  C54
1112    45  C54
1113    78  N18.3
1113    78  N18.6
1113    78  N18.2
1113    78  N18.1
1113    78  N18.1
1114    52  C40
1114    52  C19
1114    52  C100
1114    52  C100

Я хотел бы сначала сгруппировать данные на основе идентификатора, используя df.groupby('ID'), а затем на этих сгруппированных данных я хотел бы применить некоторые арифметические и операторы сравнения. Если эти условия выполняются, добавьте новый столбец (df [риск]) и введите H, в противном случае введите L в новый столбец риска. Я хотел бы применить следующие условия к сгруппированным данным:

(Age > 65) & ((Code >= C00.00 & Code <= C99.00) | (Code >= N18.1 & Code < N18.6))

Я пытался сделать для Age, используя

df1=df.groupby('ID').apply(lambda x: x['Age']>65)

и показывает строки True и False в зависимости от того, выполнено ли условие. Но я не мог добавить H, если это True или L, когда это False в новом столбце. Вторая часть сравнения немного сложнее, поскольку столбец Код содержит символы и плавающие числа. Что я сделал, так это разделил символы и цифры на два дополнительных столбца, используя:

df[['Let', 'Num']] = df['Code'].str.extract(r'([A-Za-z]+)([\d\.]+)', expand=True) df['Num'] = df['Num'].astype(float)

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

df1 = df[(df['Age'] > 65) & (((df['Let']=='C') & ((df['Num'] >= 00.00) & (df['Num'] <= 99.00))) | ((df['Let']=='N') & ((df['Num'] >= 18.00) & (df['Num'] < 18.60))))]

Приведенный выше код записывает новый фрейм данных на основе условий, но если вы видите мой пример df, он будет разделять только те строки, в которых выполняются условия (без какой-либо функции группового режима), но я хочу, чтобы все строки одного и того же идентификатора независимо от они отвечают условиям или нет. Как я могу применить аналогичную вещь к объекту groupby, а также добавить H (если условия выполнены) или L (если условия не выполнены).

Я хотел бы получить следующий вывод:

ID   Age  Code   risk
1111 66   C18.2  H
1111 66   C98.4  H
1111 66   I50    L
1111 66   D20    L
1112 45   C54    L
1112 45   C54    L
1113 78   N18.3  H
1113 78   N18.6  L
1113 78   N18.2  H
1113 78   N18.1  H
1113 78   N18.1  H
1114 52   C40    L
1114 52   C19    L
1114 52   C100   L
1114 52   C100   L

Ждем любой помощи.

...