我有一个年龄的数据框df,我正在努力将文件分类为0和1的年龄组。
DF:
User_ID | Age
35435 22
45345 36
63456 18
63523 55
我尝试了以下
df['Age_GroupA'] = 0
df['Age_GroupA'][(df['Age'] >= 1) & (df['Age'] <= 25)] = 1
但是会收到此错误
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
为了避免它,我要去.loc
df['Age_GroupA'] = 0
df['Age_GroupA'] = df.loc[(df['Age'] >= 1) & (df['Age'] <= 25)] = 1
然而,这标志着所有年龄都是1
这就是我得到的
User_ID | Age | Age_GroupA
35435 22 1
45345 36 1
63456 18 1
63523 55 1
虽然这是目标
User_ID | Age | Age_GroupA
35435 22 1
45345 36 0
63456 18 1
63523 55 0
谢谢
答案 0 :(得分:3)
您可以将布尔值掩码转换为int
- True
为1
而False
为0
:
df['Age_GroupA'] = ((df['Age'] >= 1) & (df['Age'] <= 25)).astype(int)
print (df)
User ID Age Age_GroupA
0 35435 22 1
1 45345 36 0
2 63456 18 1
3 63523 55 0
答案 1 :(得分:3)
由于同伴压力(@DSM),我觉得有必要细分你的错误:
df['Age_GroupA'][(df['Age'] >= 1) & (df['Age'] <= 25)] = 1
那你接下来尝试了什么:
df['Age_GroupA'] = df.loc[(df['Age'] >= 1) & (df['Age'] <= 25)] = 1
使用loc
时,格式不正确:
df.loc[<boolean mask>, cols of interest] = some scalar or calculated value
像这样:
df.loc[(df['Age_MDB_S'] >= 1) & (df['Age_MDB_S'] <= 25), 'Age_GroupA'] = 1
您也可以使用np.where
:
df['Age_GroupA'] = np.where( (df['Age_MDB_S'] >= 1) & (df['Age_MDB_S'] <= 25), 1, 0)
要在一行中执行此操作,有很多方法可以执行此操作
答案 2 :(得分:1)
这对我有用。 Jezrael已经解释过了。
dataframe['Age_GroupA'] = ((dataframe['Age'] >= 1) & (dataframe['Age'] <= 25)).astype(int)