Построить графики на одном полотне, где столбцы графика - уникальные значения одного столбца фрейма, а строки - значения другого столбца
Есть датафрейм со столбцами Date, Type, Location и Price. Нужно построить графики (каждый - на отдельной картинке) зависимости Price от Date для каждого Type и всё это - в зависимости от Location. То есть на каждом графике должна быть зависимость Price от Date для каждого Type, при этом все графики для каждой из Location должны быть сгруппированы в отдельные столбцы.
У меня есть код, который выводит необходимые графики в один столбец, то есть без учета Location.
dat = pd.read_csv('ap-northeast-1.csv', parse_dates = True, names=['Date','Type','OS', 'Location', 'Price'])
da = dat[dat.OS == 'Windows']
del da['OS']
del da['Location']
date = []
for d in da["Date"]:
d = str(d)
date.append(d[:10])
da["Date"] = date
df = da.loc[da.Type.str.startswith('i')]
(df
.set_index("Date")
.groupby(['Type','Location'])
.apply(lambda x: x[["Price"]].plot(grid=True, \
title=[x.name], \
subplots=True)))
Всего получается 20 графиков. Полученные 20 графиков необходимо разделить по столбцам в зависимости от того, к какой Location эти графики относятся. Всего в столбце Location два значения, это ap-northeast-1a и ap-northeast-1c. В качестве иллюстрации я в Paint сгруппировал по 10 графиков соответствующим образом. В результате работы программы должна происходить аналогичная сортировка графиков, только отображение необходимо в два столбика (по числу разных Location, которых в данном случае всего два).
Как разделить эти графики по столбцам с учетом Location?
Группа графиков по первому Location
Группа графиков по второму Location
Что должно получиться в результате обработки датасета

Ответы (1 шт):
def my_plot(df, rot=45, **kwargs):
ncols = df["Location"].nunique()
nrows = df["Type"].nunique()
f, axes = plt.subplots(nrows, ncols, **kwargs)
for col, loc in enumerate(df["Location"].unique()):
d = df.query("Location == @loc")
for row, typ in enumerate(d["Type"].unique()):
(d
.set_index("Date")
.query("Type == @typ")
[["Price"]]
.plot(grid=True, rot=rot, ax=axes[row, col], title=f"{loc}, {typ}"))
plt.tight_layout()
my_plot(df.set_index("Date"), rot=45, figsize=(12,10), sharex=True, sharey=False)
