как получить отдельные линейные графики, используя цикл в блокноте jupyter для значений groupby - PullRequest
0 голосов
/ 13 июня 2018

У меня есть фрейм данных этого формата.

brand-var1-var2(date)-var3
A - 100 - 20/12 - 300
A - 110 - 12/12 - 132
B - 24 - 24/12 - 543
C - 235 - 3/12- 534

Я хочу напечатать отдельную линейную диаграмму в блокноте Jupyter для каждой марки, такую, чтобы

Для марки A

x_axis = df.var2
y_axis = df.var1

, затем для марки B

x_axis = df.var2
y_axis = df.var1

затем для марки C и так далее ...

Я пытался использовать Loop с matplotlib, но безуспешно.

from pandas import *
import matplotlib.pyplot as plt
%matplotlib inline

ys = df['orders'], df['gmv']
x_ax = df['brand']

for y_ax in ys:
    ts = Series(y_ax,index=x_ax)
    ts.plot(kind='bar', figsize=(15,5))
    plt.show()

Это показывает ошибку - ValueError: cannot reindex from a duplicate axis

Спасибо

1 Ответ

0 голосов
/ 13 июня 2018

Я не уверен, какой тип сюжета вы хотите.В начале вашего вопроса вы запрашиваете линейный сюжет, но в коде, который вы называете kind='bar'.Поскольку фрейм данных выглядит так, как будто он содержит данные временного ряда, я предполагаю, что вам нужен линейный график.

Я создал случайный фрейм данных со следующим:

# Import packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import random

# Random date function
def random_date():

    year = random.choice(range(2000, 2010))
    month = random.choice(range(1, 13))
    day = random.choice(range(1, 29))
    return datetime(year, month, day)

# Random df
df = pd.DataFrame()
df['date'] = [random_date() for i in range(100)]
df['brand'] = [random.choice(['A','B','C']) for i in range(100)]
df['var1'] = np.random.randint(0,100,size=(100, 1))

df.head()

    date    brand   var1
0   2003-03-27  B   16
1   2009-06-24  C   7
2   2008-04-17  A   82
3   2004-02-20  C   9
4   2007-05-10  B   69

Затем для создания отдельногоЛинейные графики для каждой марки выполните следующие действия:

for brand in ['A', 'B', 'C']:

    # Subset df by brand
    sub = df[df['brand']==brand]

    # Make Series object
    ts = pd.Series(data=list(sub['var1']),index=sub['date'])

    # Plot
    ts.plot()
    plt.title('Brand {}'.format(brand))
    plt.show()

И это вывод: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...