下面是一个包含数周数据的大型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 |
+--------------+--------------------------+------------+现在,我在C列的Excel中使用这些函数:
=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... 发布于 2019-11-28 21:32:20
我的目标是数数发生的次数
(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发布于 2019-11-28 21:35:35
我想我已经理解了--为什么不使用np.where()和sum() --所以从您的例子中--导入excel作为数据格式
df = pd.read_excel('path_here')然后创建计数(或范围)列
#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()或者直接拿这笔钱
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
df.groupby('Q')['col_to_return'].nunique()https://stackoverflow.com/questions/59096185
复制相似问题