简单的 pandas 数据透视表问题 [英] Simple pandas pivot table issue

查看:97
本文介绍了简单的 pandas 数据透视表问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个如下数据框:

+-------+--------+----------+---------------+
|       | ios_id | video_id | feed_position |
+-------+--------+----------+---------------+
| 11995 | user1  |      199 |             7 |
| 11996 | user2  |      164 |            18 |
| 11997 | user3  |      209 |             1 |
| 11998 | user3  |       85 |             4 |
| 11999 | user3  |       45 |             6 |
| 12000 | user3  |      150 |            10 |
| 12001 | user3  |      207 |            12 |
| 12002 | user3  |      203 |            26 |
| 12003 | user4  |      209 |             1 |
| 12004 | user4  |      202 |             1 |
| 12005 | user4  |      204 |             1 |
| 12006 | user4  |      126 |             2 |
| 12007 | user4  |       72 |             5 |
| 12008 | user4  |      108 |            10 |
| 12009 | user4  |       85 |            11 |

我想做的是创建一个数据透视表,该表对每个video_id和feed_position的每个ios_id的实例进行计数.看起来像这样:

What I would like to do is create a pivot table that counts the instances of each ios_id for each video_id and feed_position. It would look like this:

+------------+---+---+---+---+---+---+----+----+----+----+----+
| Row Labels | 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 18 | 26 |
+------------+---+---+---+---+---+---+----+----+----+----+----+
|         45 |   |   |   |   | 1 |   |    |    |    |    |    |
|         72 |   |   |   | 1 |   |   |    |    |    |    |    |
|         85 |   |   | 1 |   |   |   |    |  1 |    |    |    |
|        108 |   |   |   |   |   |   |  1 |    |    |    |    |
|        126 |   | 1 |   |   |   |   |    |    |    |    |    |
|        150 |   |   |   |   |   |   |  1 |    |    |    |    |
|        164 |   |   |   |   |   |   |    |    |    |  1 |    |
|        199 |   |   |   |   |   | 1 |    |    |    |    |    |
|        202 | 1 |   |   |   |   |   |    |    |    |    |    |
|        203 |   |   |   |   |   |   |    |    |    |    |  1 |
|        204 | 1 |   |   |   |   |   |    |    |    |    |    |
|        207 |   |   |   |   |   |   |    |    |  1 |    |    |
|        209 | 2 |   |   |   |   |   |    |    |    |    |    |
+------------+---+---+---+---+---+---+----+----+----+----+----+

我尝试过:

pd.pivot_table(df, values=['ios_id'],
               index=['video_id'], columns=['video_id',
               'feed_position'], aggfunc=np.count_nonzero)

但是我遇到了以下错误:KeyError: 'Level video_id not found'

But I was met with this error: KeyError: 'Level video_id not found'

关于如何实现此目标的任何想法吗?

Any thoughts on how I can accomplish this?

推荐答案

您几乎拥有它,只是在列中不包含"video_id":列仅用于数据透视表顶部的内容,而索引则是发生在左边的事.

You almost had it, just don't include 'video_id' in columns : columns is just for what's going along the top of the pivot table, and index is for what's going down the left.

pd.pivot_table(df2, columns = ['feed_position'], 
                    index = ['video_id'], 
                    aggfunc= np.count_nonzero)

              ios_id                                    
feed_position     1   2   4   5   6   10  11  12  18  26
video_id                                                
45               NaN NaN NaN NaN   1 NaN NaN NaN NaN NaN
72               NaN NaN NaN   1 NaN NaN NaN NaN NaN NaN
85               NaN NaN   1 NaN NaN NaN   1 NaN NaN NaN
108              NaN NaN NaN NaN NaN   1 NaN NaN NaN NaN
126              NaN   1 NaN NaN NaN NaN NaN NaN NaN NaN
150              NaN NaN NaN NaN NaN   1 NaN NaN NaN NaN
164              NaN NaN NaN NaN NaN NaN NaN NaN   1 NaN
202                1 NaN NaN NaN NaN NaN NaN NaN NaN NaN
203              NaN NaN NaN NaN NaN NaN NaN NaN NaN   1
204                1 NaN NaN NaN NaN NaN NaN NaN NaN NaN
207              NaN NaN NaN NaN NaN NaN NaN   1 NaN NaN
209                2 NaN NaN NaN NaN NaN NaN NaN NaN NaN

这篇关于简单的 pandas 数据透视表问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆