У меня есть следующий фрейм данных (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
Ждем любой помощи.