我想像这样重新格式化数据框dfA
:
id product
100 type1
100 type1
200 type2
300 type3
300 type4
400 type5
400 type6
进入像这样的数据框dfB
:
id cnt_type1 cnt_type2 cnt_type3 cnt_type4 cnt_type5 cnt_type6
100 2 0 0 0 0 0
200 0 0 1 0 0 0
300 0 0 1 1 0 0
400 0 0 0 0 1 1
包含每种类型和唯一ID的计数。
我正在想着用groupby
做这件事的方法。
答案 0 :(得分:5)
获取假人和总和0级,即
cdf = df.set_index('id')['product'].str.get_dummies().sum(level=0)
type1 type2 type3 type4 type5 type6
id
100 2 0 0 0 0 0
200 0 1 0 0 0 0
300 0 0 1 1 0 0
400 0 0 0 0 1 1
要为列名添加前缀,请使用add_prefix
即
cdf = cdf.add_prefix('cnt_')
答案 1 :(得分:3)
这是你需要的吗?crosstab
pd.crosstab(df['id'],df['product']).add_prefix('cnt_')
Out[498]:
product cnt_type1 cnt_type2 cnt_type3 cnt_type4 cnt_type5 cnt_type6
id
100 2 0 0 0 0 0
200 0 1 0 0 0 0
300 0 0 1 1 0 0
400 0 0 0 0 1 1