减少用于绘图的熊猫DataFrame的列中的行

时间:2016-09-15 11:00:29

标签: python pandas plot dataframe

所以我有一个csv数据表,我已经读入了一个panda 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()还是对数据执行某些操作?

2 个答案:

答案 0 :(得分: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)

结果看起来很丑陋,所以你需要调整一下外观。

不确定这是否正确,因为它只有三个类别,但原作也只有三个。

答案 1 :(得分: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使用平均值/总和/大小或任何其他度量来查看数据,以下是按分类列对数据进行分组并计算每个组的均值然后绘制结果的示例

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

结果看起来像 enter image description here