首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于国家的熊猫

相当于国家的熊猫
EN

Stack Overflow用户
提问于 2019-11-28 21:10:58
回答 2查看 235关注 0票数 3

下面是一个包含数周数据的大型excel表的小摘录:

代码语言:javascript
复制
                                                 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 |
+--------------+--------------------------+------------+

现在,我在C列的Excel中使用这些函数:

代码语言:javascript
复制
    =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....

与周和位置区域匹配以创建下表:

代码语言:javascript
复制
    |    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    |

我该如何才能在熊猫身上获得上述功能呢?

我的目标是统计发生下列事件的次数:

代码语言:javascript
复制
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... 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-28 21:32:20

我的目标是数数发生的次数

代码语言:javascript
复制
(pd.cut(df['KW45'], bins=[0, 1, 2, 3, 5, 10, 20, 30, 40, 50])
   .value_counts(sort=False)
)

输出:

代码语言:javascript
复制
(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
票数 2
EN

Stack Overflow用户

发布于 2019-11-28 21:35:35

我想我已经理解了--为什么不使用np.where()和sum() --所以从您的例子中--导入excel作为数据格式

代码语言:javascript
复制
df = pd.read_excel('path_here')

然后创建计数(或范围)列

代码语言:javascript
复制
#Syntax for np.where 
#column = np.where(condition, if_true, if_false)

#Creates a cumulative count
df['val1_sum'] = np.where(df['Q'] == value1,1,0).cumsum()

或者直接拿这笔钱

代码语言:javascript
复制
sum_val1 = np.where(df['Q'[ == value1, 1, 0).sum()

#Range based 
range_1 = np.where((df['Q'] > 5) & (df['Q'] <= 10),1,0).sum()

我喜欢简单,模块化--这很容易理解。

如果您正在计算许多不同的值,我将使用count() w/ multii-index或nunique() --这并不能解决范围问题,但是您可以使用np.where() https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.count.html进行进一步的筛选。

Count unique values with pandas per groups

代码语言:javascript
复制
df.groupby('Q')['col_to_return'].nunique()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59096185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档