2016-09-15 68 views
0

所以我有一個csv的數據表,我已經讀入熊貓DataFrame中,但是其中一列在多行中有相同的字符串,這是正確的分類數據,但是當我將此列與另一個值進行比較時,它會將此列中的每個單元格視爲單獨的而不是將它們組合在一起。減少列中熊貓DataFrame的列進行繪製

Classification  Value 
MIR-weak:    0.0896571179 
MIR-weak:    0.1990277968 
MIR-bright:   0.2850534357 
MIR-bright:   0.0807078051 
FIR-dark/MIR-bright: 1.7610864745 
MIR-weak:    0.0826692503 
MIR-weak:    0.349403222 
MIR-weak:    0.7326764485 
MIR-weak:    0.0179843643 
MIR-weak:    0.0761941975 
MIR-bright:   0.4298597194 
MIR-weak:    0.4143098599 
MIR-weak:    0.1439220025 
MIR-weak:    0.0810787048 
MIR-bright:   0.6369812293 
MIR-weak:    0.0973845298 
MIR-weak:    0.1871236732 
MIR-weak:    1.5795256821 
MIR-weak:    0.9072559132 
MIR-weak:    0.6218977498 
FIR-dark/MIR-bright: 0.6920326523 
MIR-weak:    0.2580561867 
MIR-bright:   0.055071288 
MIR-weak:    1.0512992066 

因此,當我繪製使用DataFrame.plot()彼此抵靠這些列中,x軸具有用於每個分類

在第一列中的每個細胞中作爲x值,而不是僅僅四個X值,一個

任何方式來排序這與.plot()或與數據做一些事情?

回答

0

我想你想的堆疊條形圖,讓您的數據幀尋找這樣

Classification  Value 
0    MIR-weak 0.089657 
1    MIR-weak 0.199028 
2   MIR-bright 0.285053 
3   MIR-bright 0.080708 
4 FIR-dark/MIR-bright 1.761086 
5    MIR-weak 0.082669 
6    MIR-weak 0.349403 
7    MIR-weak 0.732676 
8    MIR-weak 0.017984 
9    MIR-weak 0.076194 
10   MIR-bright 0.429860 
11    MIR-weak 0.414310 
12    MIR-weak 0.143922 
13    MIR-weak 0.081079 
14   MIR-bright 0.636981 
15    MIR-weak 0.097385 
16    MIR-weak 0.187124 
17    MIR-weak 1.579526 
18    MIR-weak 0.907256 
19    MIR-weak 0.621898 
20 FIR-dark/MIR-bright 0.692033 
21    MIR-weak 0.258056 
22   MIR-bright 0.055071 
23    MIR-weak 1.051299 

你可以做這些步驟開始:

  • 排序分類。

  • 繞分類旋轉。

  • 更改列以擺脫多索引。

  • 做一個轉置數據框的堆積條形圖。

D = D.sort_values("Classification").reset_index(drop=True) 
D = D.pivot(columns='Classification') 
D.columns = ["FIR-dark/MIR-bright", "MIR-bright", "MIR-weak"] 
D.T.plot.bar(stacked=True,legend=False) 

雖然結果看起來很醜,所以你需要調整外觀。

不知道這是不是正確的事情,因爲它只有三個類別,但你的原始也只有三個。

0

你需要告訴大家,「分類」列包含分類數據大熊貓,這樣做,可以使用astype

我用read_clipboard在OP讀取數據

import pandas as pd 

df = pd.read_clipboard() 

df['Classification']=df['Classification'].str.strip(':').astype(
'category',categories=['MIR-weak', 
         'MIR-bright', 
         'FIR-dark/MIR-bright'], ordered=True) 

df.plot(x='Classification',y='Value') 

圖表看起來像 enter image description here

你也可以使用groupby與平均/總和/大小或任何其他措施來查看數據,這裏是一個示例分組數據ssification列,並計算各組的平均再繪製結果

df.groupby('Classification').mean().plot(kind='bar') 

結果會像 enter image description here