Python 通过df获取一个新列,其中包含组_中特定范围内所有值的总计数
按“u_id”分组的现有数据帧 需要有一个新的列来记录每行中某个范围(例如7-12、7包括、12排除)之间的“u_点”总数。因此,新的数据帧看起来是这样的:Python 通过df获取一个新列,其中包含组_中特定范围内所有值的总计数,python,pandas,Python,Pandas,按“u_id”分组的现有数据帧 需要有一个新的列来记录每行中某个范围(例如7-12、7包括、12排除)之间的“u_点”总数。因此,新的数据帧看起来是这样的: u_id u_name u_points u_range_(7-12) 1 AA 12 1 1 AA 8 1 1 AA 5
u_id u_name u_points u_range_(7-12)
1 AA 12 1
1 AA 8 1
1 AA 5 1
2 BC 15 3
2 BC 9 3
2 BC 10 3
2 BC 6 3
2 BC 8 3
我尝试使用count(),但我可以得到一个只有这些索引值的序列,但我需要所有行的输出。也尝试了转换,但在条件“介于”之间时它不起作用。为
=
创建掩码,为&
按位创建链,为创建掩码,我找到了一种“低努力方式”来实现相同的结果
df["u_range_(7-12)"] = pd.Series(np.where(df.u_points.between(7,12-1).values, 1,0)).groupby(df2['u_id']).transform('sum')
因为我是熊猫队的新手,我个人觉得这更可取,因为它使用的是“熟悉”的操作,而不是其他写得很好的答案
m = df['u_points'].ge(7) & df['u_points'].lt(12)
df['u_range_(7-12)'] = m.view('i1').groupby(df['u_name']).transform('sum')
#alternative
#df['u_range_(7-12)'] = m.astype('int').groupby(df['u_name']).transform('sum')
print (df)
u_id u_name u_points u_range_(7-12)
0 1 AA 12 1
1 1 AA 8 1
2 1 AA 5 1
3 2 BC 15 3
4 2 BC 9 3
5 2 BC 10 3
6 2 BC 6 3
7 2 BC 8 3
m = df['u_points'].ge(7) & df['u_points'].lt(12)
df['u_range_(7-12)'] = df.assign(m = m.astype('int')).groupby('u_name')['m'].transform('sum')
print (df)
u_id u_name u_points u_range_(7-12)
0 1 AA 12 1
1 1 AA 8 1
2 1 AA 5 1
3 2 BC 15 3
4 2 BC 9 3
5 2 BC 10 3
6 2 BC 6 3
7 2 BC 8 3
df.merge(df[df['u_points'].between(7,12-1)].groupby('u_id').size().to_frame(name='u_range_(7-12)').reset_index(),
on='u_id')
df["u_range_(7-12)"] = pd.Series(np.where(df.u_points.between(7,12-1).values, 1,0)).groupby(df2['u_id']).transform('sum')