我有以下数据框(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))
我尝试使用
为年龄做 df1=df.groupby('ID').apply(lambda x: x['Age']>65)
并且对于行显示True和False,具体取决于是否满足条件。但是如果它是True或L,我在新列中为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
期待任何帮助。