简单的熊猫数据透视表问题

时间:2015-06-01 02:45:14

标签: python pandas pivot-table

我有一个如下数据框:

+-------+--------+----------+---------------+
|       | 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的实例。它看起来像这样:

+------------+---+---+---+---+---+---+----+----+----+----+----+
| 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'

有关如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:2)

你几乎拥有它,只是不在列中包含'video_id':列只是针对数据透视表顶部的内容,而索引是针对左下方的内容。

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