python - Pandas:将一列的值统一为另一列的每个值

标签 python pandas

我有一个如下所示的 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 个相关类别。有没有任何直接的解决方案可以实现这一目标?

最佳答案

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

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

关于python - Pandas:将一列的值统一为另一列的每个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33203943/

相关文章:

python - 在 Python 中使用 Dropbox API v2 覆盖文件

python - pandas 与 int 之间的日期

pandas - 如何让 pandas.read_csv 不执行任何转换?

python - pandas.read_excel() 输出 OverflowError : Python int too large to convert to C int

python - Pandas agg 根据数据类型定义指标

python - 如何在python中转换转换数据框

python - 使用 Python 和机器学习 (LSTM) 预测 future 'x' 天的股票价格

python - 如何防止 json_normalize 在 Pandas 中重复列标题?

javascript - 正则表达式匹配/替换

python - 在 pandas Series 中设置值很慢,为什么?