为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫在使用与列标题相同的列值的同时旋转一列

熊猫在使用与列标题相同的列值的同时旋转一列

倚天杖 2021-03-31 04:44:33
我想在数据框中旋转一列,其中列值成为列标题,而这些列的实际值成为1or 0。例子:        movie_id  cluster_id      answer_id0         73        1               41         80        1               54         81        1               27         84        1               110        88        1               111        83        1               413        85        1               116        54        1               122        79        1               323        87        1               1我希望透视后的结果是:        movie_id  cluster_id     1   2   3   4   50         73        1            0   0   0   1   0 1         80        1            0   0   0   0   14         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   50         73        1           NaN  NaN NaN  4  NaN1         80        1           NaN  NaN NaN NaN   54         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函数内执行此操作。
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

万一你只想依靠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_tableie更快:


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


查看完整回答
反对 回复 2021-04-09
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信