Я изо всех сил пытаюсь создать многоиндексный сюжет для панд, как я хочу. У меня есть следующий фиктивный кадр данных панд:
data = {
'Day': [1, 1, 2, 2, 3, 3, 4, 2, 4],
'Condition': ['A', 'B', 'A', 'A', 'A', 'B', 'B', 'B', 'A'],
'Invest': [1100, 2002, 500, 200, 1030, 4000, 750, 5000, 320],
'Spent': [100, 200, 100, 100, 100, 200, 50, 300, 250]
}
index = range(len(data['Day']))
columns = ['Day', 'Condition', 'Invest', 'Spent']
df = pd.DataFrame(data, index=index, columns=columns)
+----+-------+-------------+----------+---------+
| | Day | Condition | Invest | Spent |
|----+-------+-------------+----------+---------|
| 0 | 1 | A | 1100 | 100 |
| 1 | 1 | B | 2002 | 200 |
| 2 | 2 | A | 500 | 100 |
| 3 | 2 | A | 200 | 100 |
| 4 | 3 | A | 1030 | 100 |
| 5 | 3 | B | 4000 | 200 |
| 6 | 4 | B | 750 | 50 |
| 7 | 2 | B | 5000 | 300 |
| 8 | 4 | A | 320 | 250 |
+----+-------+-------------+----------+---------+
Я могу получить следующий сюжет, используя:
df.groupby(['Day', 'Condition']).sum()\
.unstack()\
.plot(subplots=True,
layout=(2,2),
figsize=(8,6));
Проблема : Я хочу, чтобы результаты A и B были сгруппированы вместе. Например, верхние графики, то есть (Invest, A) и (Invest, B), находятся вместе на одном графике (аналогично для потраченных). Таким образом, у меня было бы только 2 субплота вместо 4 субплотов. У меня есть много примеров здесь в stackoverflow, но все еще не могу заставить его работать. Некоторые предлагали таять и использовать морского рожка, все еще не работало, и я предпочел бы использовать панд.
П.С .: Что я подразумеваю под " Верхний уровень "? Использую ли я правильную терминологию здесь или нет, не уверен, но когда я снимаю стеки сгруппированных панд, в MultiIndex есть различные уровни, я имею в виду группировать график на основе верхнего уровня, как показано ниже:
df.groupby(['Day', 'Condition'])\
.sum()\
.unstack()