对groupby obj应用算术和比较运算符

2024-09-29 23:32:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧(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,否则在新的risk列中输入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。但是我不能在一个新的列中加H,如果它是真的,或者当它是假的时候加L。 比较的第二部分比较困难,因为代码列包含字符和浮点数。我所做的是将字符和数字分隔成两个附加列,使用:

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))))]

上面的代码基于条件编写了一个新的dataframe,但是如果您看到我的示例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

期待任何帮助。你知道吗


Tags: 数据iddfagecode条件numrisk

热门问题