以下是一个大型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...
答案 0 :(得分:2)
我的目标是统计发生次数:
void get_movie_info(movie_data& movie1, movie_data& movie2)
void movie_display(const movie_data& movie1, const movie_data& movie2)
输出:
(pd.cut(df['KW45'], bins=[0, 1, 2, 3, 5, 10, 20, 30, 40, 50])
.value_counts(sort=False)
)
答案 1 :(得分:0)
我想我了解这一点-为什么不使用np.where()和sum() 所以从您的示例中-将excel导入为数据框
+---------+------------+------------------+------------+
| Entity | Sub_Entity | Year | Proportion |
+---------+------------+------------------+------------+
| 1000160 | 855960 | 1962 | 0.6 |
| 1000160 | 855960 | . | 0.6 |
| 1000160 | 855960 | . | 0.6 |
| 1000160 | 855960 | 2008 | 0.6 |
| 1000203 | 054453 | 1972 | 0.07 |
| 1000203 | 054453 | . | 0.07 |
| 1000203 | 054453 | . | 0.07 |
| 1000203 | 054453 | 2017 | 0.07 |
| 1000203 | 739846 | 1972 | 0.07 |
| 1000203 | 739846 | . | 0.07 |
| 1000203 | 739846 | . | 0.07 |
| 1000203 | 739846 | 2017 | 0.07 |
| 1000203 | 547953 | 1972 | 3.33 |
| 1000203 | 547953 | . | 3.33 |
| 1000203 | 547953 | . | 3.33 |
| 1000203 | 547953 | 2017 | 3.33 |
| 1000203 | 984244 | 1972 | 3.33 |
| 1000203 | 984244 | . | 3.33 |
| 1000203 | 984244 | . | 3.33 |
| 1000203 | 984244 | (This Year 2019) | 3.33 |
| | | | |
+---------+------------+------------------+------------+
然后创建计数(或范围)列---
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()
我喜欢简单,模块化的方法-而且很容易理解。
如果要计算很多不同的值,我将使用带multii-index的count()或nunique()-这不能解决范围问题,但是您可以使用np.where()进一步过滤 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.count.html
Count unique values with pandas per groups
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()