简单 pandas 数据透视 table 问题
Simple pandas pivot table issue
我有如下数据框:
+-------+--------+----------+---------------+
| | 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 |
我想做的是创建一个枢轴 table 来计算每个 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'
我有什么想法可以实现吗?
您几乎已经掌握了,只是不要在列中包含 'video_id':列仅用于表示枢轴 table 顶部的内容,而索引用于表示左侧的内容.
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
我有如下数据框:
+-------+--------+----------+---------------+
| | 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 |
我想做的是创建一个枢轴 table 来计算每个 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'
我有什么想法可以实现吗?
您几乎已经掌握了,只是不要在列中包含 'video_id':列仅用于表示枢轴 table 顶部的内容,而索引用于表示左侧的内容.
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