Pandas 将年龄变量分组

Pandas categorizing age variable into groups

我有一个带有年龄的数据框 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

谢谢

您可以将布尔掩码转换为 int - True1False0:

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

由于同侪压力 (@DSM),我不得不分析你的错误:

df['Age_GroupA'][(df['Age'] >= 1) & (df['Age'] <= 25)] = 1

这是chained indexing/assignment

接下来你尝试了什么:

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)

要在一行中做到这一点,有很多方法可以做到这一点

这对我有用。耶斯莱尔已经解释过了。

 dataframe['Age_GroupA'] = ((dataframe['Age'] >= 1) & (dataframe['Age'] <= 25)).astype(int)