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
- 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
由于同侪压力 (@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)
要在一行中做到这一点,有很多方法可以做到这一点
这对我有用。耶斯莱尔已经解释过了。
dataframe['Age_GroupA'] = ((dataframe['Age'] >= 1) & (dataframe['Age'] <= 25)).astype(int)
我有一个带有年龄的数据框 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
- 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
由于同侪压力 (@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)
要在一行中做到这一点,有很多方法可以做到这一点
这对我有用。耶斯莱尔已经解释过了。
dataframe['Age_GroupA'] = ((dataframe['Age'] >= 1) & (dataframe['Age'] <= 25)).astype(int)