2014-01-04 5 views
5

Я работаю над проектом iPython с Pandas и Numpy. Я просто учился, поэтому этот вопрос, вероятно, довольно простой. Допустим, у меня есть два столбца данныхPandas/Numpy: Как превратить данные столбца в разреженную матрицу

--------------- 
| col1 | col2 | 
--------------- 
| a | b | 
| c | d | 
| b | e | 
--------------- 

Я хочу преобразовать эти данные формы.

--------------------- 
| a | b | c | d | e | 
--------------------- 
| 1 | 1 | 0 | 0 | 0 | 
| 0 | 0 | 1 | 1 | 0 | 
| 0 | 1 | 0 | 0 | 1 | 
--------------------- 

Тогда я хочу взять три колонки версия

--------------------- 
| col1 | col2 | val | 
--------------------- 
| a | b | .5 | 
| c | d | .3 | 
| b | e | .2 | 
--------------------- 

и превратить его в

--------------------------- 
| a | b | c | d | e | val | 
--------------------------- 
| 1 | 1 | 0 | 0 | 0 | .5 | 
| 0 | 0 | 1 | 1 | 0 | .3 | 
| 0 | 1 | 0 | 0 | 1 | .2 | 
--------------------------- 

Я очень новой для панд и Numpy, как бы я это сделать? Какие функции я бы использовал?

ответ

5

Я думаю, что вы ищете функцию pandas.get_dummies() и метод pandas.DataFrame.combineAdd.

In [7]: df = pd.DataFrame({'col1': list('acb'), 
          'col2': list('bde'), 
          'val': [.5, .3, .2]}) 

In [8]: df1 = pd.get_dummies(df.col1) 

In [9]: df2 = pd.get_dummies(df.col2) 

Это дает следующие два dataframes:

In [16]: df1 
Out[16]: 
    a b c 
0 1 0 0 
1 0 0 1 
2 0 1 0 

[3 rows x 3 columns] 

In [17]: df2 
Out[17]: 
    b d e 
0 1 0 0 
1 0 1 0 
2 0 0 1 

[3 rows x 3 columns] 

которые могут быть объединены следующим образом:

In [10]: dummies = df1.combineAdd(df2) 

In [18]: dummies 
Out[18]: 
    a b c d e 
0 1 1 0 0 0 
1 0 0 1 1 0 
2 0 1 0 0 1 

[3 rows x 5 columns] 

Последний шаг, чтобы скопировать val колонку в новую dataframe.

In [19]: dummies['val'] = df.val 

In [20]: dummies 
Out[20]: 
    a b c d e val 
0 1 1 0 0 0 0.5 
1 0 0 1 1 0 0.3 
2 0 1 0 0 1 0.2 

[3 rows x 6 columns] 
+0

работал как очарование, спасибо. –

Смежные вопросы