熊猫价值范围

在熊猫中是否有一种简单的方法可以在一定范围的值增量上调用 groupby?例如,给出下面的示例,我可以在 0.155增量的情况下对列 B进行 I bin 和分组,以便例如,将列 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列的相关统计数据?

117819 次浏览

试试这个:

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

你可能会对 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]

这就是我使用 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