Trazado de líneas múltiples con dataframe pandas

Tengo un dataframe que se parece a lo siguiente

color xy 0 red 0 0 1 red 1 1 2 red 2 2 3 red 3 3 4 red 4 4 5 red 5 5 6 red 6 6 7 red 7 7 8 red 8 8 9 red 9 9 10 blue 0 0 11 blue 1 1 12 blue 2 4 13 blue 3 9 14 blue 4 16 15 blue 5 25 16 blue 6 36 17 blue 7 49 18 blue 8 64 19 blue 9 81 

En última instancia quiero dos líneas, una azul, una roja. La línea roja debe ser esencialmente y = x y la línea azul debe ser y = x ^ 2

Cuando hago lo siguiente:

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

La salida es esta:

    ¿Hay alguna manera de hacer que los pandas sepan que hay dos grupos? Y agruparlos en consecuencia. Me gustaría poder especificar la columna ‘color’ como el diferenciador establecido

    Puede usar groupby para dividir el dataframe en subgrupos según el color:

     for key, grp in df.groupby(['color']): 

     import numpy as np import pandas as pd import matplotlib.pyplot as plt df = pd.read_table('data', sep='\s+') fig, ax = plt.subplots() for key, grp in df.groupby(['color']): ax = grp.plot(ax=ax, kind='line', x='x', y='y', c=key, label=key) plt.legend(loc='best') plt.show() 

    rendimientos introduzca la descripción de la imagen aquí

    Otra forma sencilla es usar la función de pivot para formatear los datos como necesite primero.

    df.plot() hace el rest

     df = pd.DataFrame([ ['red', 0, 0], ['red', 1, 1], ['red', 2, 2], ['red', 3, 3], ['red', 4, 4], ['red', 5, 5], ['red', 6, 6], ['red', 7, 7], ['red', 8, 8], ['red', 9, 9], ['blue', 0, 0], ['blue', 1, 1], ['blue', 2, 4], ['blue', 3, 9], ['blue', 4, 16], ['blue', 5, 25], ['blue', 6, 36], ['blue', 7, 49], ['blue', 8, 64], ['blue', 9, 81], ], columns=['color', 'x', 'y']) df = df.pivot(index='x', columns='color', values='y') df.plot() 

    resultado

    pivot convierte efectivamente los datos en:

    introduzca la descripción de la imagen aquí

    Si tiene seaborn instalación seaborn instalada, un método más fácil que no requiere que realice un pivot :

     import seaborn as sns sns.lineplot(data=df, x='x', y='y', hue='color') 

    Puedes usar este código para obtener tu salida deseada

     import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({'color': ['red','red','red','blue','blue','blue'], 'x': [0,1,2,3,4,5],'y': [0,1,2,9,16,25]}) print df color xy 0 red 0 0 1 red 1 1 2 red 2 2 3 blue 3 9 4 blue 4 16 5 blue 5 25 

    Para graficar grafica

     a = df.iloc[[i for i in xrange(0,len(df)) if df['x'][i]==df['y'][i]]].plot(x='x',y='y',color = 'red') df.iloc[[i for i in xrange(0,len(df)) if df['y'][i]== df['x'][i]**2]].plot(x='x',y='y',color = 'blue',ax=a) plt.show() 

    Salida El resultado de salida se verá así