2013-12-12 43 views
0

我的購買數據爲csv。如何將分類數據轉換爲R或Python中的每一列:Pandas?

| Name |  Sex  |  Week 
|------------|-------------|-------------- 
| Apple |  F  |  Mon 
| Orange |  F  |  Tue 
| Apple |  M  |  Fri  ... 
| Grape |  M  |  Mon 

,我要轉換的csv ...

| Name:Apple | Name:Orange | Name:Grape | Sex:F | Sex:M | Week:Mon | Week:Tue | 
|  1  |  0  |  0  | 1 | 0 | 1  | 0  | 
|  0  |  1  |  0  | 1 | 0 | 0  | 1  | ... 
|  1  |  0  |  0  | 0 | 1 | 0  | 0  | 
|  0  |  0  |  1  | 0 | 1 | 1  | 0  | 

R或Python中有什麼好的方法轉換? 謝謝。

+1

您需要證明您已經嘗試解決該問題。 –

+0

對不起。我嘗試通過哈希/字典進行收斂。它工作正常,但非常誠實。所以,我想知道其他最好的方法。 –

回答

1

下面是使用「reshape2」包在R中執行此操作的一種方法。您必須重新排列輸出中列的順序。

假設你data.frame被稱爲「是myDF」:

library(reshape2) 
x <- melt(as.matrix(mydf)) 
dcast(x, Var1 ~ value, fun.aggregate = length, value.var="value") 
# Var1 Apple F Fri Grape M Mon Orange Tue 
# 1 1  1 1 0  0 0 1  0 0 
# 2 2  0 1 0  0 0 0  1 1 
# 3 3  1 0 1  0 1 0  0 0 
# 4 4  0 0 0  1 1 1  0 0 

我以前沒有使用Python或熊貓,但有一個get_dummies函數應該做你想做的。

import numpy as np 
import pandas as pd 
data = {'name': ['apple', 'orange', 'apple', 'grape'], 
     'sex': ['F', 'F', 'M', 'M'], 
     'week': ['mon', 'tue', 'fri', 'mon']} 
frame = pd.DataFrame(data) 
print frame 


    name sex week 
0 apple F mon 
1 orange F tue 
2 apple M fri 
3 grape M mon 

print pd.get_dummies(frame.unstack().dropna()).groupby(level = 1).sum() 

    F M apple fri grape mon orange tue 
0 1 0  1 0  0 1  0 0 
1 1 0  0 0  0 0  1 1 
2 0 1  1 1  0 0  0 0 
3 0 1  0 0  1 1  0 0 
相關問題