2016-09-12 3 views
2

私はそれがこのようになります、私は上のいくつかの分析をしたいと思っパンダのデータフレームを持っている:列(文字列)内のユニークな要素によってpandasデータフレームを爆発させ、不測の事態の表を作成しますか?

from pandas import DataFrame 
a = DataFrame([{'var1': 'K802', 'var2': 'No Concatenation', 'var3':'73410'}, 
      {'var1': 'O342,O820,Z370', 'var2': '59514,01968', 'var3':'146010'}, 
      {'var1': 'Z094', 'var2': 'No Concatenation', 'var3':''}, 
      {'var1': 'N920', 'var2': '58120', 'var3':'130910'}, 
      {'var1': 'S801,W2064,I219', 'var2': 'No Concatenation', 'var3':'93630'}, 
      {'var1': 'O987,O820,Z302,Z370', 'var2': '59514,01968,58611', 'var3':'146010'}, 
      {'var1': 'O987,O820,Z302,Z370,E115', 'var2': '59514,01968,58611', 'var3':'146020'}, 
      {'var1': 'N359,N319,J459', 'var2': '52281', 'var3':'113720'}, 
      {'var1': 'O342,O343,O820,Z370', 'var2': '59514,01968,59871', 'var3':'146010'}, 
      {'var1': 'J459,C449,E785,I10', 'var2': 'No Concatenation', 'var3':'43810'}, 
      {'var1': 'Z380,C780,C189,I270,J449,Z933', 'var2': 'No Concatenation', 'var3':'157520'}]) 
print a.var1 
0        K802 
1     O342,O820,Z370 
2        Z094 
3        N920 
4     S801,W2064,I219 
5    O987,O820,Z302,Z370 
6   O987,O820,Z302,Z370,E115 
7     N359,N319,J459 
8    O342,O343,O820,Z370 
9    J459,C449,E785,I10 
10 Z380,C780,C189,I270,J449,Z933 
Name: var1, dtype: object 

それはそれは100万のプラスの行を持っているから来たcsvファイルとして切り捨てられました。

b = DataFrame([{'K802':1, 'O342': 0, 'O820':0, 'Z370':0, 'Z094': 0, 'N920':0, 'S801':0, 'W2064': 0, 'I219':0}, 
      {'K802':0, 'O342': 1, 'O820':1, 'Z370':1, 'Z094': 0, 'N920':0, 'S801':0, 'W2064': 0, 'I219':0}, 
      {'K802':0, 'O342': 0, 'O820':0, 'Z370':0, 'Z094': 1, 'N920':0, 'S801':1, 'W2064': 0, 'I219':0}, 
      {'K802':0, 'O342': 0, 'O820':0, 'Z370':0, 'Z094': 0, 'N920':1, 'S801':0, 'W2064': 0, 'I219':0}, 
      {'K802':0, 'O342': 0, 'O820':0, 'Z370':0, 'Z094': 0, 'N920':0, 'S801':1, 'W2064': 1, 'I219':1}]) 
print b 
    I219 K802 N920 O342 O820 S801 W2064 Z094 Z370 
0  0  1  0  0  0  0  0  0  0 
1  0  0  0  1  1  0  0  0  1 
2  0  0  0  0  0  1  0  1  0 
3  0  0  1  0  0  0  0  0  0 
4  1  0  0  0  0  1  1  0  0 
... 

基本的に、私がその中に存在しているため、その後のいずれか1でカラムを投入a.var1の列内の各ユニークなエントリの新しい列を取得したいと思います:目標は、このようなもので終わることです行が存在しない場合は0です。私はvar1var2、およびvar3を個別に作成し、元のaのインデックスで3つを結合して、頻度と多分ロジスティック回帰を計算する必要があります。 私はパンダには新しく、これを効率的に行う方法を理解できていないようです。

ご協力いただければ幸いです。

答えて

3

pd.Seriesに定義されているメソッドを使用できます。このユースケースでは、pd.get_dummies関数よりも使用する方が簡単です。 pd.concatを使用して、結果のdfsを結合することができます。

pd.concat([a[col].str.get_dummies(',') for col in a], axis=1) 
Out: 
    C189 C449 C780 E115 E785 I10 I219 I270 J449 J459 ... \ 
0  0  0  0  0  0 0  0  0  0  0 ...  
1  0  0  0  0  0 0  0  0  0  0 ...  
2  0  0  0  0  0 0  0  0  0  0 ...  
3  0  0  0  0  0 0  0  0  0  0 ...  
4  0  0  0  0  0 0  1  0  0  0 ...  
5  0  0  0  0  0 0  0  0  0  0 ...  
6  0  0  0  1  0 0  0  0  0  0 ...  
7  0  0  0  0  0 0  0  0  0  1 ...  
8  0  0  0  0  0 0  0  0  0  0 ...  
9  0  1  0  0  1 1  0  0  0  1 ...  
10  1  0  1  0  0 0  0  1  1  0 ...  
関連する問題