Pandas 按列分组并应用函数创建新列

Pandas groupby a column and apply function to create a new column

我正在尝试根据具有相同准入代码的会员分组及其平均停留时间值来设置类别。

我的意思是,我有以下数据框:

MemberID AdmittingCode LOS
1 a 5
2 a 10
1 b 2
2 b 1

现在,在上面的数据框中,我想根据录取代码进行分组,并为该特定录取代码取 LOS 的平均值,如果 LOS 小于平均值,它将被设置为“0”类别,否则'1'.

因此,对于上述录取代码 'a' 的情况,我们的 LOS 为 5 和 10。这里,平均值为 7.5,因此 MemeberID 为 1,AdmittingCode 为 'a',LOS ' 5' 将被设置为类别 0。与获取以下数据帧的逻辑类似:

MemberID AdmittingCode LOS LOSCategory
1 a 5 0
2 a 10 1
1 b 2 1
2 b 1 0

使用 GroupBy.transformmean 并比较原始列:

m = df.groupby('AdmittingCode')['LOS'].transform('mean').lt(df['LOS'])
df['LOSCategory'] = m.astype(int)
print (df)
   MemberID AdmittingCode  LOS  LOSCategory
0         1             a    5            0
1         2             a   10            1
2         1             b    2            1
3         2             b    1            0

或者如果需要设置为字符串 1, 0:

df['LOSCategory'] = m.astype(int).astype(str)

df['LOSCategory'] = np.where(m, '1', '0')