分级 Pandas value_counts

Binning Pandas value_counts

我有一个 Pandas 系列由 df.column.value_counts() 制作。sort_index()。

| N Months | Count |
|------|------|
|    0 |   15 |
|    1 |    9 |
|    2 |   78 |
|    3 |  151 |
|    4 |  412 |
|    5 |  181 |
|    6 |  543 |
|    7 |  175 |
|    8 |  409 |
|    9 |  594 |
|   10 |  137 |
|   11 |  202 |
|   12 |  170 |
|   13 |  446 |
|   14 |   29 |
|   15 |   39 |
|   16 |   44 |
|   17 |  253 |
|   18 |   17 |
|   19 |   34 |
|   20 |   18 |
|   21 |   37 |
|   22 |  147 |
|   23 |   12 |
|   24 |   31 |
|   25 |   15 |
|   26 |  117 |
|   27 |    8 |
|   28 |   38 |
|   29 |   23 |
|   30 |  198 |
|   31 |   29 |
|   32 |  122 |
|   33 |   50 |
|   34 |   60 |
|   35 |  357 |
|   36 |  329 |
|   37 |  457 |
|   38 |  609 |
|   39 | 4744 |
|   40 | 1120 |
|   41 |  591 |
|   42 |  328 |
|   43 |  148 |
|   44 |   46 |
|   45 |   10 |
|   46 |    1 |
|   47 |    1 |
|   48 |    7 |
|   50 |    2 |

我想要的输出是

| bin   | Total  |
|-------|--------|
| 0-13  |   3522 |
| 14-26 |    793 |
| 27-50 |   9278 |

我尝试了 df.column.value_counts(bins=3).sort_index() 但得到了

|               bin               | Total |
|---------------------------------|-------|
| (-0.051000000000000004, 16.667] |  3634 |
| (16.667, 33.333]                |  1149 |
| (33.333, 50.0]                  |  8810 |

我可以用

得到正确的结果
a = df.column.value_counts().sort_index()[:14].sum()
b = df.column.value_counts().sort_index()[14:27].sum()
c = df.column.value_counts().sort_index()[28:].sum()

print(a, b, c)

Output: 3522 793 9270

但我想知道是否有 pandas 方法可以做我想做的事。非常欢迎任何建议。 :-)

您可以使用 pd.cut:

pd.cut(df['N Months'], [0,13, 26, 50], include_lowest=True).value_counts()

Update 您应该可以将自定义 bin 传递给 value_counts:

df['N Months'].value_counts(bins = [0,13, 26, 50])

输出:

N Months
(-0.001, 13.0]    3522
(13.0, 26.0]       793
(26.0, 50.0]      9278
Name: Count, dtype: int64