如何解决我如何将熊猫中的数据拆分到指定的存储桶中,例如40-40-20?
全部,
我试图将我的数据分成 3 个桶,分别为 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"],"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%']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。