我如何将 pandas 中的数据拆分到指定的存储桶中,例如40-40-20?

How can i split my data in pandas into specified buckets e.g. 40-40-20?

全部,

我正在尝试将我的数据分成 3 个桶,即 40%、40% 和 20%。我如何使用 pandas 执行此操作? 例如所以你得到最低的 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%']