【问题标题】:Using Pandas how do I count groups of data?使用 Pandas 如何计算数据组?
【发布时间】:2016-04-21 18:15:56
【问题描述】:

我有一个大数据框:

      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.score 按范围分组,然后计算范围内的这些值。例如,如果我的 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。我需要访问桌子。

【问题讨论】:

标签: python numpy pandas histogram


【解决方案1】:

您可以使用cut 函数来做到这一点:

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

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

【讨论】:

  • cut 正是我需要的!谢谢:)
【解决方案2】:

您最好的选择可能是 groupby 函数。要按大小为 0.1 的范围进行分组,您可以这样做(这里的数据框称为 df

 df['purity.score'].groupby((df['purity.score']*10).astype(int)).count()

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

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    相关资源
    最近更新 更多