首页 > 解决方案 > 如何使用熊猫查找给定范围内的计数

问题描述

我在excel中的数据表:

    HC No.    Domain  Education mark -Q1  Education mark -Q2  \
0        1  Domain A            1.469754            1.969754   
1        2  Domain A            0.428562            0.928562   
2        3  Domain A            1.130643            1.630643   
3        4  Domain A            1.296837            1.796837   
4        5  Domain A            1.180092            1.680092   
5        6  Domain B            1.990000            2.490000   
6        7  Domain B            0.731105            1.231105   
7        8  Domain B            1.087374            1.587374   
8        9  Domain B            1.726001            2.226001   
9       10  Domain B            0.353576            0.853576   
10      11  Domain B            0.195931            0.695931   
11      12  Domain C            1.967909            2.467909   
12      13  Domain C            1.022164            1.522164   
13      14  Domain C            1.924649            2.424649   
14      15  Domain C            1.571244            2.071244   
15      16  Domain C            1.658053            2.158053   
16      17  Domain D            0.195931            0.695931   
17      18  Domain D            0.000000            0.500000   
18      19  Domain D            0.938607            1.438607   
19      20  Domain D            0.414434            0.914434   
20      21  Domain D            0.904212            1.404212   
21      22    Others            1.540628            2.040628   
22      23    Others            1.336798            1.836797   
23      24    Others            0.419771            0.919771   
24      25    Others            1.990000            2.490000   
25      26    Others            1.990000            2.490000   

我想根据范围过滤并使用熊猫找到计数,即

教育标志的预期 O/P -Q1:

下表中的数据仅供参考

    Domains  0-0.5  0.5-1.0  1.0-1.5  1.5-2.5  2.5-3.5
0  Domain A      2       11       46        0        0
1  Domain B      5        6       22        0       66
2  Domain C      6       22        8        5        5
3  Domain D     11        7        5        8        8

非常感谢您对此的任何帮助。最终我需要找出,在 (0-0.5) 范围内的每个域中,“教育标记 Q1”列有多少,然后是 1 到 1.5,依此类推直到 5。

PS:我对熊猫非常陌生,两周前我就开始了。我能够分析绘图的其他选项,例如查找均值、正常计数等,但我不确定这个范围概念。

我需要使用 plotly 在表格/图表中绘制结果数据。

经过大量的谷歌搜索和反复试验,我求助于stackoverflow。谢谢 !

标签: pandasplotly

解决方案


使用pd.cut

bins = [0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5]

df['Q1Bin'] = pd.cut(df['Education_mark_Q1'],
                              bins,right=False)
df['Q2Bin'] = pd.cut(df['Education_mark_Q2'],
                              bins,right=False)


new_df = (
    pd.melt(df, id_vars=["Domain"], value_vars=["Q1Bin", "Q2Bin"])
    .groupby(["Domain", "value"])["value"]
    .count()
    .unstack()
)

print(new_df)

value         [0.0, 0.5)  [0.5, 1.0)  [1.0, 1.5)  [1.5, 2.0)  [2.0, 2.5)
Domain                                                                  
  Others             1.0         1.0         1.0         4.0         3.0
Domain A             1.0         1.0         4.0         4.0         NaN
Domain B             2.0         3.0         2.0         3.0         2.0
Domain C             NaN         NaN         1.0         5.0         4.0
Domain D             3.0         5.0         2.0         NaN         NaN

推荐阅读