如何按ID分组为Pandas DataFrame添加满足薪资条件的二进制列
问题
现有如下Pandas DataFrame:
#Load the required libraries import pandas as pd #Create dataset data = {'id': [1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 2, 2,2,2,2, 3, 3, 3, 3, 3, 3, 4, 4,4,4,4,4,4,4, 5, 5, 5, 5, 5,5, 5, 5,5,], 'cycle': [1,2, 3, 4, 5,6,7,8,9,10,11, 1,2, 3,4,5, 1,2, 3, 4, 5,6, 1,2,3,4,5,6,7,8, 1,2, 3, 4, 5,6,7,8,9,], 'Salary': [5, 6, 7,8,9,6,4,12,5,14,15, 4, 5,6,7,8, 5,8,4,7,12,1, 8,1,2,7,4,5,8,1, 1, 4,9,10,11,7,13,4,15,], 'Children': ['No', 'Yes', 'Yes', 'Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No','Yes', 'Yes', 'No','No', 'Yes', 'Yes','Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No',], 'Days': [123, 128, 66, 66, 120, 141, 52,96, 120, 141, 52, 96, 120,128, 66, 120, 15,123, 128, 66, 120, 141, 141,128, 66, 123, 128, 66, 120,141, 123, 128, 66, 123, 128, 66, 120, 141, 52,], } #Convert to dataframe df = pd.DataFrame(data) print("df = \n", df)
需要按id分组添加一个二进制列,规则为:分组内Salary>=7时列值为1,否则为0。例如id=1的Salary列是[5,6,7,8,9,6,4,12,5,14,15],对应的二进制列应为[0,0,1,1,0,0,0,1,0,1,1]。请问如何用Python实现该需求?
解决方案
可以直接通过布尔条件判断加类型转换实现,操作简单高效:
# 新增二进制列,按规则赋值 df['binary_col'] = (df['Salary'] >= 7).astype(int) # 查看id=1的结果验证 print("id=1的结果:") print(df[df['id'] == 1][['Salary', 'binary_col']])
说明
df['Salary'] >= 7会生成一个布尔值Series,每个元素根据Salary是否满足条件返回True或False.astype(int)将布尔值转换为整数:True对应1,False对应0- 该操作会自动针对每个
id分组内的元素逐一判断,完全符合需求
注:你提供的id=1示例中,
Salary=9对应的二进制值为0,这与规则描述的Salary>=7时为1不符,推测是示例笔误。按规则执行后,Salary=9对应的二进制值应为1。
内容的提问来源于stack exchange,提问作者NN_Developer
相关产品推荐
相关产品推荐

