Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:为另一列的每个值统一一列的值_Python_Pandas - Fatal编程技术网

Python 熊猫:为另一列的每个值统一一列的值

Python 熊猫:为另一列的每个值统一一列的值,python,pandas,Python,Pandas,我有一个如下所示的数据帧: 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),我想通过添加缺失的类别(频率等于零)来扩展每个用户的数据 因此,预期结果是: u

我有一个如下所示的数据帧:

    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个相关类别。有什么简单的解决方案可以实现这一点吗?

您可以在
用户id
类别
上创建数据透视表,用零填充
nan
值,堆栈
类别
(这使得数据帧在
用户id
类别
上建立索引),然后重置索引以匹配所需的输出

>>> (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