python - Pandas 旋转一列,同时使用相同的列值作为列标题

标签 python pandas

我想旋转数据框中的一列,其中列值成为列标题,而这些列的实际值变为 10

示例:

        movie_id  cluster_id      answer_id
0         73        1               4
1         80        1               5
4         81        1               2
7         84        1               1
10        88        1               1
11        83        1               4
13        85        1               1
16        54        1               1
22        79        1               3
23        87        1               1

我希望枢轴后的结果是:

        movie_id  cluster_id     1   2   3   4   5
0         73        1            0   0   0   1   0 
1         80        1            0   0   0   0   1
4         81        1            0   1   0   0   0

一种方法是将 answer_id 列复制到不同的名称,然后在 pivot_table 函数中使用它。但不确定如何完成填充,或者总体上是否有更好的方法可以在不实际复制列的情况下执行此操作。

    pivot_df = df.pivot_table(
        values='copy_answer_id',
        index=['movie_id', 'cluster_id'],
        columns='answer_id').reset_index()

完成上述操作后,您将获得所有 NaN 和相应列的 answer_id 中的内容。

        movie_id  cluster_id     1    2   3   4   5
0         73        1           NaN  NaN NaN  4  NaN
1         80        1           NaN  NaN NaN NaN   5
4         81        1           NaN   2  NaN NaN NaN

然后我可以这样做:

cols = [1,2,3,4,5]
pivot_df[cols] = pivot_df[cols].replace({1:1,2:1,3:1,4:1,5:1})

之后将 NaN 转换为零: 我可以执行 pivot_df.fillna(0, inplace=True) 将所有 NaN 转换为零。

但是否有更好的方法在 pivot_table 函数中执行此操作。

最佳答案

如果您只想依赖 pivot_table。你可以这样做:

# Use a temporary column with values one, pivot and fill nan with 0
new = df.assign(val=1).pivot_table(columns='answer_id',index=['cluster_id','movie_id'],values='val',fill_value=0).reset_index()

或者,您可以使用 get_dummies,因为它比 pivot_table 更快,即:

new = pd.concat([df[['movie_id','cluster_id']],pd.get_dummies(df['answer_id'])],1)

    movie_id  cluster_id  1  2  3  4  5
0         73           1  0  0  0  1  0
1         80           1  0  0  0  0  1
4         81           1  0  1  0  0  0
7         84           1  1  0  0  0  0
10        88           1  1  0  0  0  0
11        83           1  0  0  0  1  0
13        85           1  1  0  0  0  0
16        54           1  1  0  0  0  0
22        79           1  0  0  1  0  0
23        87           1  1  0  0  0  0

关于python - Pandas 旋转一列,同时使用相同的列值作为列标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951412/

相关文章:

python - Pandas 浅复制 DataFrame 的两列

python - 使用 glob 写入多个 csv

python - 将 Python pandas 数据框中的每个数字四舍五入为 2 位小数

python网页mod_wsgi

Python在样条插值中保持点

python - 将多索引转换为逐行多维 NumPy 数组。

python - 拆分元组以在 sql 查询中使用值作为过滤器

c++ - 改进我的共享 secret 算法/方法并建议加密协议(protocol)

python - DataFrames重复组合

python - Pandas:添加新的计算(分数)行