我有一个数据框df
,我从中提取了一列mpg
。
我想根据mpg
的值为每一行添加类标签/名称。
我用
完成了mpg = df.iloc[:,0]
median = np.percentile(mpg, q=50)
upper_quartile = np.percentile(mpg, q=75)
lower_quartile = np.percentile(mpg, q=25)
mpg_class = np.ones((num_observations, 1))
for i, element in enumerate(X):
mpg = element[0]
if mpg >= upper_quartile:
mpg_class[i] = 3
elif mpg >= median:
mpg_class[i] = 2
elif mpg >= lower_quartile:
mpg_class[i] = 1
else:
mpg_class[i] = 0
但我想知道是否可以通过numpy
做得更聪明?我想有可能用np.where
或类似的东西来做。
答案 0 :(得分:3)
好像您正在寻找pd.qcut:
pd.qcut(df.iloc[:, 0], [0, 0.25, 0.5, 0.75, 1], [0, 1, 2, 3])
Out:
0 1
1 0
2 1
3 0
4 0
5 0
6 0
...
第一个参数是您要离散的系列。第二个是分位数/百分位数。最后一个是标签(从0到25% - 0,25%到50% - 1等)