使用Pandas如何计算数据组?

时间:2016-04-21 18:15:56

标签: python numpy pandas histogram

我有一个大型数据框:

      peak.count  purity.score material  
0           10.0      0.134814      ADB  
1           10.0      0.134814      ADB  
2           17.0      0.116754      ADB  
3           17.0      0.116754      ADB  
4           17.0      0.102921      ADB   
...          ...           ...      ...  
1269        14.0      0.166039      SSA  
1270        14.0      0.166039      SSA  
1271        14.0      0.166039      SSA  
1272        12.0      0.169396      SSA  
1273        12.0      0.169396      SSA  
1274        12.0      0.169396      SSA 

我很好奇将pure.sscore分组到一个范围,然后计算范围内的那些值。例如,如果我的15个值介于0.1和0.2之间,我希望输出在1处反映15。我尝试过将value_counts与numpy范围结合使用,但不计算组内的值:

首先我这样做:s = pd.Series(df['purity.score'])

pd.value_counts(s).reindex(np.arange(0,1,0.1)).fillna(0)
0.0    362.0
0.1      0.0
0.2      0.0
0.3      0.0
0.4      0.0
0.5      0.0
0.6      0.0
0.7      0.0
0.8      0.0
0.9      0.0

如何对这些值进行分组?注意我希望使用此表来提供API以呈现javascript直方图,但不希望使用Bokeh或Matplotlib。我需要访问该表。

2 个答案:

答案 0 :(得分:2)

您可以使用cut功能执行此操作:

df.groupby(pd.cut(df['purity.score'], bins=10)).count()

此处,cutdf['purity.score']划分为其选择的10个bin,但您可以通过传递数组来定义bin边界。

答案 1 :(得分:0)

您最好的选择可能是groupby功能。要按大小0.1的范围进行分组,您可以执行此操作(数据框在此处称为setNames(c(somePalette['Yellow'],somePalette['Blue'],somePalette['Purple']),c('setosa','versicolor','virginica')); ## setosa versicolor virginica ## "#F6B436" "#4D86A0" "#672767"

df

这里的参数是purity.score列,乘以10,然后转换为int - 映射[0.1-0.2) - >的操作。 1,[0.2,0.3) - > 2等不是很漂亮,但它有效。