2016-01-11 27 views
0

我有一個這樣的熊貓數據幀:我如何可以採取多列的工會,有相同的標籤,在大熊貓的數據幀

dx1  dx2 dx3 dx4 
25041 40391 5856 0 
25041 40391 25081 5856 
25041 40391 42822 0 
25061 40391 0  0 
25041 40391 0  5856 
40391 25002 5856 3569 

使用虛擬方法,get_dummies,我創建虛表是這樣的:

dummayData = pd.get_dummies(dataFrame,prefix='dx') 
dummyData 


dx_25041 dx_25061 dx_40391 dx_25002 dx_40391 dx_0 dx_25081 dx_42822 dx_5856 dx_0 dx_3569 dx_5856 
1   0   0   0   1   0  0   0   1  1  0  0 
1   0   0   0   1   0  1   0   0  0  0  1 
1   0   0   0   1   0  0   1   0  1  0  0 
0   1   0   0   1   1  0   0   0  1  0  0 
1   0   0   0   1   1  0   0   0  0  0  1 
0   0   1   1   0   0  0   0   1  0  1  0 

重複虛擬值,例如: dx_40391,dx_0,dx_5856等。他們可以是兩個或許多。我想通過UNION操作合併這些虛擬變量,因此對於dx_40391,所有行都將具有值1,並且只保留數據框中的一列。對所有其他重複的虛擬變量也是如此我有成千上萬的虛擬變量和數十萬行。有沒有一種有效的方法來做到這一點?

回答

0

如果使用通常的列索引df[col]上重複列名,你會得到所有列這個名字,那麼你可以只取最高沿着行(使用maxaxis=1):

pd.DataFrame({c: pd.DataFrame(df[c]).max(axis=1) for c in df.columns.unique()}) 

    dx_0 dx_25002 dx_25041 dx_25061 dx_25081 dx_3569 dx_40391 dx_42822 \ 
0  0   1   1   0   1  0   0   0 
1  1   1   1   0   1  0   0   0 
2  0   1   1   0   1  1   0   0 
3  0   1   0   1   1  0   0   1 
4  0   1   1   0   1  0   0   1 
5  1   0   0   0   0  0   1   0 

    dx_5856 
0  1 
1  0 
2  1 
3  1 
4  0 
5  1 
+0

當我將它應用到我的數據框時,出現以下錯誤:ValueError:對象類型沒有名爲1的軸 Sanoj

+0

@maxyahoo:我有df = pd.get_dummies(dataFrame,前綴= 'DX')。然後我按照上面的說法在'df'上應用您的規則。但是我收到上面評論中提到的錯誤。我是否錯過了任何步驟? – Sanoj

+0

哦,我的答案有一個錯字現在再試一次 – maxymoo