2015-07-20 36 views
1

您好所有我有一個包含數據如下轉換兩列數據幀到發生基質在熊貓

A a 
A b 
B f 
B g 
B e 
B h 
C d 
C e 
C f 

第一列的格式的CSV文件包含從特徵向量= [A項的第二列包含可用特徵,b,C,d,E,F,G,H] 我想將其轉換爲occurence矩陣看起來象下面

a,b,c,d,e,f,g,h 
A 1,1,0,0,0,0,0,0 
B 0,0,0,0,1,1,1,1 
C 0,0,0,1,1,1,0,0 

誰能告訴我如何做到這一點使用熊貓嗎?

回答

6

這是另一種使用pd.get_dummies()的方法。

import pandas as pd 

# your data 
# ======================= 
df 

    col1 col2 
0 A a 
1 A b 
2 B f 
3 B g 
4 B e 
5 B h 
6 C d 
7 C e 
8 C f 

# processing 
# =================================== 
pd.get_dummies(df.col2).groupby(df.col1).apply(max) 

     a b d e f g h 
col1      
A  1 1 0 0 0 0 0 
B  0 0 0 1 1 1 1 
C  0 0 1 1 1 0 0 
+0

這工作就像一個魅力。謝謝! –

3

如果你的數據有一個錯字或沒有,但不清楚你可以crosstab此:

In [95]: 
pd.crosstab(index=df['A'], columns = df['a']) 

Out[95]: 
a b d e f g h 
A     
A 1 0 0 0 0 0 
B 0 0 1 1 1 1 
C 0 1 1 1 0 0 

在您的樣本數據的第二列具有價值a作爲該列的名字,但在你的預期輸出它在該列的值

編輯

好,我定你的輸入數據,以便產生正確的結果:

In [98]: 
import pandas as pd 
import io 
t="""A a 
A b 
B f 
B g 
B e 
B h 
C d 
C e 
C f""" 
df = pd.read_csv(io.StringIO(t), sep='\s+', header=None, names=['A','a']) 
df 

Out[98]: 
    A a 
0 A a 
1 A b 
2 B f 
3 B g 
4 B e 
5 B h 
6 C d 
7 C e 
8 C f 

In [99]: 
ct = pd.crosstab(index=df['A'], columns = df['a']) 
ct 

Out[99]: 
a a b d e f g h 
A      
A 1 1 0 0 0 0 0 
B 0 0 0 1 1 1 1 
C 0 0 1 1 1 0 0 
+0

哪個版本的熊貓是這個?在0.13.1中,'pd.crosstab(df ['A'],df ['a'])'可以工作,但是使用'index'和'column' kwargs會引發意外的異常。 – wflynny

+0

我使用'0.16.2'這可能是沒有命名或命名別的參數,將檢查 – EdChum

+0

仍然+1,只是想知道,因爲我使用的是舊版本。 – wflynny