2016-09-15 71 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