Pandas 按值范围分组
- 2025-02-27 09:06:00
- admin 原创
- 60
问题描述:
pandas 中是否有一种简单的方法可以调用groupby
一系列值增量?例如,给出下面的示例,我可以使用增量对列进行分组,B
以便0.155
例如将列中的前几个组B
分为“0 - 0.155、0.155 - 0.31 ...”之间的范围
import numpy as np
import pandas as pd
df=pd.DataFrame({'A':np.random.random(20),'B':np.random.random(20)})
A B
0 0.383493 0.250785
1 0.572949 0.139555
2 0.652391 0.401983
3 0.214145 0.696935
4 0.848551 0.516692
或者,我可以先根据这些增量将数据分类到一个新列中,然后使用它groupby
来确定可能适用于列的任何相关统计数据A
?
解决方案 1:
您可能感兴趣pd.cut
:
>>> df.groupby(pd.cut(df["B"], np.arange(0, 1.0+0.155, 0.155))).sum()
A B
B
(0, 0.155] 2.775458 0.246394
(0.155, 0.31] 1.123989 0.471618
(0.31, 0.465] 2.051814 1.882763
(0.465, 0.62] 2.277960 1.528492
(0.62, 0.775] 1.577419 2.810723
(0.775, 0.93] 0.535100 1.694955
(0.93, 1.085] NaN NaN
[7 rows x 2 columns]
解决方案 2:
尝试一下:
df = df.sort_values('B')
bins = np.arange(0, 1.0, 0.155)
ind = np.digitize(df['B'], bins)
print df.groupby(ind).head()
当然,您可以对群组使用任何功能,而不仅仅是head
。
解决方案 3:
这就是我使用 groupby 函数的方式
df1=data
bins = [0,40,50,60,70,100]
group_names=['F','S','C','B','A']
df1['grade']=pd.cut(data['student_mark'],bins,labels=group_names)
df1
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD