熊猫/ Numpy根据存在将行移至列

时间:2019-05-13 09:25:31

标签: python pandas numpy scikit-learn

我有一个像这样的数据框:

col_a | col b
  0      1
  0      2
  0      3
  1      1
  1      2

我想将其转换为:

col_a | 1 | 2 | 3
  0     1   1   1
  1     1   1   0

不幸的是,大多数围绕该主题的问题/答案都只是将其围绕

背景:对于Scikit,我想使用b列中值的存在作为属性/功能(就像某种手动CountVectorizer,但是在这种情况下是行值而不是文本)

2 个答案:

答案 0 :(得分:3)

使用get_dummies,将第一列创建到index,最后使用max每个索引,仅在输出中返回1/0值:

df = pd.get_dummies(df.set_index('col_a')['col b'], prefix='', prefix_sep='').max(level=0)

print (df)
       1  2  3
col_a         
0      1  1  1
1      1  1  0

答案 1 :(得分:1)

您可以使用Groupby.cumcount并将其用作枢轴数据帧的列,可以使用pd.croostab获得该数据帧,并且默认情况下会计算这些因素的频率表:

cols = df.groupby('col_a').cumcount()
pd.crosstab(index = df.col_a, columns = cols)

col_0  0  1  2
col_a         
0      1  1  1
1      1  1  0