2017-10-10 125 views
-1

我有一個很大的DataFrame(大約2500x2500),我想選擇符合條件的所有值(在這個特定情況下,大於50),然後讀取它們成列有條件地使用Python將矩陣轉換爲列

我有下面的代碼來選擇這些值> 50,但其位變成列此,我很想念

data[(data >= 50)] 

我的數據的一個較小的版本將是

 AAAA BBBB CCCC DDDD EEEE FFFF GGGG HHHH IIII 
AAAA 80 4  0  65 17 32 42 93 27 
BBBB 4  21 37 256 12 0  1  32 62 
CCCC 0  37 0  32 67 34 2  0 26 
DDDD 65 256 32 12 8  31 53 61 1 
EEEE 17 12 67 8  8  3  74 1 6 
FFFF 32 0  34 31 3  23 15 93 23 
GGGG 42 1  2  53 74 15 180 123 32 
HHHH 93 32 0  61 1  93 123 8 7 
IIII 27 62 26 1  6  23 32 7 10 

我想得到的是列1作爲索引,列2作爲標題,然後是大於50的任何值。這看起來如下;

index Header Value 
AAAA AAAA 80 
AAAA DDDD 67 
AAAA HHHH 93 
BBBB DDDD 256 
BBBB IIII 62 
CCCC EEEE 67 
DDDD BBBB 256 
DDDD GGGG 53 
DDDD HHHH 61 
EEEE CCCC 67 
EEEE GGGG 74 
FFFF HHHH 93 
GGGG EEEE 74 
GGGG GGGG 180 
GGGG HHHH 123 
HHHH AAAA 93 
HHHH DDDD 61 
HHHH FFFF 93 
HHHH GGGG 123 
IIII BBBB 62 
+0

細胞如在'col'和'row'索引值Δα –

+0

'data [(data> = 50)]'? – Goyo

+0

@JonathanPortorreal我正在尋找實際價值,而不是索引 – Taylrl

回答

1

實現此目的的一種方法是使用pandas.melt()。首先,你需要從數據框的索引創建一個id變量:

data['index'] = data.index 

可以比融數據幀(即從廣角重塑長格式),您所指定的id_vars是「指數」列:

data_melt = pd.melt(data, id_vars='index') 

的data_melt看起來是這樣的:

index variable value 
0 AAAA AAAA 80 
1 BBBB AAAA 4 
2 CCCC AAAA 0 
3 DDDD AAAA 65 
4 EEEE AAAA 17 
5 FFFF AAAA 32 

的最後一步是篩選出具有value >= 50所有行:

data_melt[data_melt['value'] >= 50] 

這會給你所需的輸出:

index variable value 
0 AAAA AAAA 80 
3 DDDD AAAA 65 
7 HHHH AAAA 93 
12 DDDD BBBB 256 
17 IIII BBBB 62 
+0

謝謝@clemens!這絕對是美麗的!太整潔了! – Taylrl