如何将熊猫中的数据划分为指定的桶,例如40-40-20



全部,

我试图将我的数据分成三个部分,即40%、40%和20%。我怎么能用熊猫做到这一点?例如,你得到了底部最低的40%,中间的40%和顶部的20%:

pd.cut(df['count'], 5,labels = ['1','2','3','4','5'],retbins=True)

上面分成5个五分位数,但我想定义40:40:20个百分位数。

有什么想法吗?

改用qcut

df["quantile"] = pd.qcut(df["count"], q=[0, 0.4, 0.8, 1],
labels=["lowest", "middle", "top"])
>>> df.sort_values("count")
count quantile
4       5   lowest
7       7   lowest
6       9   lowest
15      9   lowest
5      17   lowest
1      19   lowest
9      22   lowest
2      25   lowest
16     25   lowest
12     29   middle
19     31   middle
18     32   middle
0      32   middle
10     36   middle
14     38   middle
3      39   middle
8      44      top
11     47      top
17     47      top
13     48      top

获取垃圾箱:

df["quantile"], bins = pd.qcut(df["count"], q=[0, 0.4, 0.8, 1],
labels=["lowest", "middle", "top"],
retbins=True)

你走在了正确的道路上。从你问题中的措辞来看,我不确定你是想根据可能值的范围还是值的实际分布来对数据进行分类。我会把两者都展示出来。

使用pd.cut((根据可能值的范围对数据进行装箱。使用pd.qcut((根据值的实际分布对数据进行装箱。

import pandas as pd
import numpy as np
data = np.random.randint(0, 100, 100)
labels = ['Bottom 40%', 'Middle 40%', 'Top 20%']
# bin data based on range of possible values
df['possible'] = pd.cut(df['count'], [0, 40, 80, 100], labels=labels)
# bin data based on distribution of values
df['distribution'] = pd.qcut(df['count'], [0., .4, .8, 1.], labels=labels)
top20possible = df.loc[df['possible'] == 'Top 20%']
top20distribution = df.loc[df['distribution'] == 'Top 20%']

相关内容

最新更新