使用标签在数据透视表中绘制

时间:2020-09-07 10:32:36

标签: python pandas matplotlib pivot

我的数据集

df

Month   1    2     3    4      5    Label
Name
    A   120  80.5  120  105.5  140  0      
    B    80  110  98.5  105    100  1     
    C   150  90.5  105  120    190  2   
    D   100  105  98.5  110    120  1   
    ...

要应用月份的逆矩阵绘制月份的图,

df = df.T
df

Name     A    B    C    D 
Month
    1  120    80   150   100      
    2  80.05  110  90.5  105      
    3  130    98.5 105   98.005      
    4  105.5  105  120   110      
    5  140    100  190   120
Label  0.00   1.0  2.0   1.000      

我最终要做的是绘制一个图,x轴是本月,y轴是值。

但是, 我有两个问题。

第一季度。

要求逆矩阵,则更改'label'的数据类型(int-> float)

只能将“标签”的索引设置为int类型吗?

输出我想要的内容

df = df.T
df

Name     A    B    C    D 
Month
    1  120    80   150   100      
    2  80.05  110  90.5  105      
    3  130    98.5 105   98.005      
    4  105.5  105  120   110      
    5  140    100  190   120
Label    0      1    2     1

第二季度。

q1实际上是q2。 绘制图时,我想使用标签对其进行分组。(像seaborn的色调一样)

使用上面的数据透视表绘制图时,是否有可能进行分组? (matplotlib,sns方法无关紧要)

上面的标签不必是int,如果可能的话,您不需要回答q1任务。

感谢您阅读

1 个答案:

答案 0 :(得分:1)

Q2:您需要调整值,例如这里与DataFrame.melt一起使用,hue可以使用:

df1 = df.reset_index().melt(['Name','Label'])
print (df1)

sns.stripplot(data=df1,hue='Label',x='Name',y='value')

Q1:熊猫不支持它,例如如果转换最后一行标签,则不会将值更改为浮点数:

df = df.T

df.loc['Label', :] = df.loc['Label', :].astype(int)
print (df)
Name       A      B      C      D
1      120.0   80.0  150.0  100.0
2       80.5  110.0   90.5  105.0
3      120.0   98.5  105.0   98.5
4      105.5  105.0  120.0  110.0
5      140.0  100.0  190.0  120.0
Label    0.0    1.0    2.0    1.0

编辑:

df1 = df.reset_index().melt(['Name','Label'], var_name='Month')
print (df1)
   Name  Label Month  value
0     A      0     1  120.0
1     B      1     1   80.0
2     C      2     1  150.0
3     D      1     1  100.0
4     A      0     2   80.5
5     B      1     2  110.0
6     C      2     2   90.5
7     D      1     2  105.0
8     A      0     3  120.0
9     B      1     3   98.5
10    C      2     3  105.0
11    D      1     3   98.5
12    A      0     4  105.5
13    B      1     4  105.0
14    C      2     4  120.0
15    D      1     4  110.0
16    A      0     5  140.0
17    B      1     5  100.0
18    C      2     5  190.0
19    D      1     5  120.0

sns.lineplot(data=df1,hue='Label',x='Month',y='value')