pandas - 根据类型计数重新格式化数据帧

时间:2018-02-04 04:48:21

标签: python-3.x pandas

我想像这样重新格式化数据框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做这件事的方法。

2 个答案:

答案 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