2015-04-28 190 views
0

計數代替分類值讓我們假設我有一個數據幀:大熊貓:多類標籤

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)) 

回答

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 
+0

雖然這是對有機磷農藥不同,這樣的變換分析(上cat_col)似乎很奇怪。 .. –