我如何将 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%']
全部,
我正在尝试将我的数据分成 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%']