首页 > 解决方案 > pandas 相当于 countifs

问题描述

以下是包含数周数据的大型 Excel 表的一小部分摘录:

                                                 Q
+--------------+--------------------------+------------+
|   Keyword    |        searches          |    KW45    |
+--------------+--------------------------+------------+
| durni coat   |                      110 |          1 |
| gliss coat   |                       40 |          2 |
| hart coat    |                       70 |          7 |
| kepla coat   |                       50 |          3 |
| lasox coat   |                        0 |          1 |
| magna coat   |                       10 |            |
| magoxid coat |                       10 |          2 |
| plasma coat  |                       50 |          3 |
| selga coat   |                        0 |          1 |
| sila coat    |                        0 |         25 |
| temp coat    |                       10 |         50 |
+--------------+--------------------------+------------+


目前,我在 Excel 中的 C 列中使用了这些函数:

    =COUNTIFS(Q:Q;"=1";;INDEX($Q:$T;;MATCH(C1;$Q$1:$T$1;0));">0")
    =COUNTIFS(Q:Q;"=2";;INDEX($Q:$T;;MATCH(C1;$Q$1:$T$1;0));">0")
    =COUNTIFS(Q:Q;"=3";;INDEX($Q:$T;;MATCH(C1;$Q$1:$T$1;0));">0")
    =COUNTIFS(Q:Q;">=4";Q:Q;"<=5";INDEX($Q:$T;;MATCH(C1;$Q$1:$T$1;0));">0")
    =COUNTIFS(Q:Q;">=6";Q:Q;"<=10";INDEX($Q:$T;;MATCH(C1;$Q$1:$T$1;0));">0")
    =COUNTIFS(Q:Q;">=11";Q:Q;"<=20";INDEX($Q:$T;;MATCH(C1;$Q$1:$T$1;0));">0")
    =COUNTIFS(Q:Q;">=21";Q:Q;"<=30";INDEX($Q:$T;;MATCH(C1;$Q$1:$T$1;0));">0")
and so on....

匹配周和位置范围以创建下表:


    |    B       |   C  | 
    | Position   | KW45 | 
    |------------|------|
    | Pos. 1     | 3    | 
    | Pos. 2     | 2    | 
    | Pos. 3     | 2    | 
    | Pos. 4-5   | 0    |
    | Pos. 6-10  | 1    |
    | Pos. 11-20 | 0    |
    | Pos. 21-30 | 1    |
    | Pos. 31-40 | 0    |
    | Pos. 41-50 | 1    |


我将如何在熊猫中实现上述功能?

我的目标是计算出现次数:

value 1 in column Q
value 2 in column Q
value 3 in column Q
value range 4-5 in column Q
value range 6-10 in column Q
value range 11-20 in column Q

and so on... 

标签: pythonpandas

解决方案


我的目标是计算出现次数

(pd.cut(df['KW45'], bins=[0, 1, 2, 3, 5, 10, 20, 30, 40, 50])
   .value_counts(sort=False)
)

输出:

(0, 1]      4
(1, 2]      2
(2, 3]      2
(3, 5]      0
(5, 10]     1
(10, 20]    0
(20, 30]    0
(30, 40]    0
(40, 50]    1
Name: KW45, dtype: int64

推荐阅读