我有一个像这样的数据框:
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,但是在这种情况下是行值而不是文本)
答案 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