我有以下数据帧(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') 基于ID对数据进行分组,然后在这个分组数据上,我想应用一些算术和比较运算符 . 如果满足这些条件,请添加新列(df [risk])并输入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 . 但是如果它是True,则无法添加H,如果在新列中为False,则无法添加 . 由于Code列包含字符和浮点数,因此比较的第二部分有点困难 . 我所做的是使用以下方法将字符和数字分成两列:

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特性)但是我想要所有相同ID的行,不管它们是否满足条件与否 . 我怎么能在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

期待任何帮助 .