我有一个如下所示的DataFrame:
user_id category frequency
0 user1 cat1 4
1 user2 cat2 1
2 user2 cat3 4
3 user3 cat3 1
4 user3 cat4 3
对于每个用户,我都有与频率相关的类别。 总共有4个类别(cat1,cat2,cat3,cat4),我想通过添加频率等于零的缺失类别来扩展每个用户的数据。
所以预期的结果是:
user_id category frequency
0 user1 cat1 4
1 user1 cat2 0
2 user1 cat3 0
3 user1 cat4 0
4 user2 cat1 0
5 user2 cat2 1
6 user2 cat3 4
7 user2 cat4 0
8 user3 cat1 0
9 user3 cat2 0
10 user3 cat3 1
11 user3 cat4 3
所以现在每个用户都拥有所有4个相关类别。是否有任何直接的解决方案来实现这一目标?
答案 0 :(得分:1)
您可以在user_id
和category
上创建数据透视表,将nan
值填入零,堆栈category
(这会使数据框在user_id
上编入索引和category
),然后重置索引以匹配所需的输出。
>>> (df.pivot(index='user_id', columns='category', values='frequency')
.fillna(0)
.stack()
.reset_index()
user_id category 0
0 user1 cat1 4
1 user1 cat2 0
2 user1 cat3 0
3 user1 cat4 0
4 user2 cat1 0
5 user2 cat2 1
6 user2 cat3 4
7 user2 cat4 0
8 user3 cat1 0
9 user3 cat2 0
10 user3 cat3 1
11 user3 cat4 3