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.transform
和 mean
并比较原始列:
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')
我正在尝试根据具有相同准入代码的会员分组及其平均停留时间值来设置类别。
我的意思是,我有以下数据框:
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.transform
和 mean
并比较原始列:
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')