Python 或 Pandas 的分箱或分组技术是什么

What binning or group technique is this of Python or Pandas

我是 Pandas 的新手,我知道处理数据通常是一种很好的做法,在其中创建虚拟变量甚至在 DataFrame 中创建新列。 但是我遇到了这些代码行并且无法理解它的作用。目的是将1个分类列的数据按年龄分组为3列。

ratings_df.loc[(ratings_df['age'] <= 40), 'age_group'] = '40 years and younger'
ratings_df.loc[(ratings_df['age'] > 40) & (ratings_df['age'] < 57), 'age_group'] = 'between 40 and 57 years'
ratings_df.loc[(ratings_df['age'] >= 57), 'age_group'] = '57 years and older'

它不会按给定名称创建新列或新数据框。但它后来被用于在具有另一个自变量的回归模型中训练数据 'beauty'

lm = ols('beauty ~ age_group', data = ratings_df).fit()

它有什么作用?

这样查看代码行可能更容易:

condition = (ratings_df['age'] <= 40)
column_name = 'age_group'
new_value = '40 years and younger'

ratings_df.loc[condition, column_name] = new_value

简而言之,名为 age_group 的列为 ratings_df['age'] <= 40 为真的每一行设置了一个新值 "40 years and younger"

除了@kd88 的好回答,你注意到“没有创建新列”,如果你分阶段查看代码,你可以看到 loc 在满足条件时设置一个值并设置NaN 如果为假,则分 3 个阶段构建新列:

In [98]: ratings_df = pd.DataFrame({'age': [20, 40, 41, 50, 57]})
In [99]: ratings_df.loc[(ratings_df['age'] <= 40), 'age_group'] = '40 years and younger'
In [100]: ratings_df
Out[100]: 
   age             age_group
0   20  40 years and younger
1   40  40 years and younger
2   41                   NaN
3   50                   NaN
4   57                   NaN

根据您要对数据执行的操作,您可以使用 queryview 放入行的子集(但不要尝试修改这些否则你会得到一个错误):

In [101]: ratings_df.query('age <= 40')
Out[101]: 
   age             age_group
0   20  40 years and younger
1   40  40 years and younger