根据值的四分位数范围在新列中分配标签

Assign label in new column based on quartile range of values

我正在尝试根据数据集中一列的四分位数范围来标记值,但在合成两个步骤时遇到了问题。下面是一个玩具数据集:

fruit   rating_store   rating_home    

apple   1.0            .8
pear    .8             .9
berry   .9             .4
tomato  .7             .5
orange  .3             .6
banana  .2             .4
...     ...            ...

首先,我试图确定 rating_home 的四分位数范围,我可以用它来做:

qrating_home = pd.cut(df['rating_home'], 4).value_counts().reset_index()

但是,我现在无法为 qrating_home 范围分配标签(例如“低”、“low_med”、“high_med”、“高”)值 数据集中。期望的输出:

fruit   rating_store   rating_home   rating_home_quartile 

apple   1.0            .8            high
pear    .8             .9            high
berry   .9             .4            low
tomato  .7             .5            low
orange  .3             .6            low_med
banana  .2             .4            low
...     ...            ...

这个 post 非常有帮助,但对范围进行了硬编码: 因为我的数据集可能会随着更多数据的进入而改变,所以我需要在每次 运行 我的代码时计算范围。感谢您的帮助!

我想你想要:

df['rating_home_quartile'] = pd.cut(df['rating_home'], bins=4, 
                                     labels=['low', 'low_med', 'high_med', 'high'])

听起来您想将数据分成四分位数。 pd.qcut 可以轻松地对四分位数、五分位数、十分位数等执行此操作

df['rating_home_quartile'] = pd.qcut(df['rating_home'], q=4, labels=['low', 'low_med', 'high_med', 'high'])
  • q是分位数
  • labels为对应的分位数名称;确保它与给定 q
  • 的分位数匹配