Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plotting in pivot table using label

my dataset

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   
    ...

To draw a plot for Month, applying the inverse matrix,

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      

Ultimately what I want to do is Drawing a plot, the x-axis is this month, y-axis is value.

but, I have two questions.

Q1.

To inverse matrix, the data type of 'label' is changed(int -> float),

Can only the index of the 'label' be set to int type?

output what I want

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

Q2.

q1 is actually for q2. When drawing a plot, I want to group it using a label.(Like seaborn hue)

When drawing a plot using the pivot table above, is there a way for grouping to be possible? (matplotlib, sns method does not matter)

The label above doesn't have to be int, and if possible, you don't need to answer the q1 task.

thank you for reading

like image 526
ybin Avatar asked May 21 '26 17:05

ybin


1 Answers

Q2: You need reshape values, e.g. here with DataFrame.melt for possible use hue:

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

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

Q1: Pandas not support it, e.g. if convert last row label it not change values to floats:

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

EDIT:

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')
like image 199
jezrael Avatar answered May 23 '26 06:05

jezrael



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!