pandas:用多类标签

时间:2015-04-28 05:42:57

标签: python pandas

假设我有一个数据框:

df = pd.DataFrame({'label': [0, 1, 2, 0, 1, 2], 'cat_col': [1, 1, 2, 2, 3, 3]})
   cat_col  label
0        1      0
1        1      1
2        2      2
3        2      0
4        3      1
5        3      2

我想将此数据框转换为以下内容:

cat_col, label, count_when_label_is_0, count_when_label_is_1, count_when_label_is_2
1         0           1,               1,          0
1         1           1,               1,          0
...

所以基本上我为每个标签值(多项标签)添加一列,并且当row.cat_col就是该行中的那个时,我为每个行添加了该标签值的计数。我目前有这个,但它很慢:

size = df[['cat_col', 'label']].groupby(['cat_col', 'label']).size()
def get_size(cat_val, label_val):
  if label_val in size[cat_val]: return size[cat_val][target_val]
    return 0

for label_val in range(9): # 9 classes in multinominal label
  df['new_col_' + str(label_val)] = df['cat_col'].apply(
      lambda cat_val: get_size(cat_val, label_val))

1 个答案:

答案 0 :(得分:0)

您可以使用pivot_table

In [11]: df.pivot_table(index="cat_col", columns="label", aggfunc=len, fill_value=0)
Out[11]:
label    0  1  2
cat_col
1        1  1  0
2        1  0  1
3        0  1  1