Печать многоиндексированных данных с пандами - PullRequest
0 голосов
/ 19 мая 2018

У меня есть словарь Python в виде:

dict = {0: {a: 1, b: 2}, 1: {a: 1, b: 2}}

Я создал из него панд DataFrame, используя from_dict().Это дало мне мультииндексный dataframe`, как и ожидалось.

Теперь я хочу построить этот dataframe с внешним индексом, являющимся осью x, и внутренним индексом, представляющим собой отдельные линии на моем графике, точки данных на y-осей являются значениями.

Я пытался сложить их, но это дало мне только одну строку.

Мой текущий код:

data = pd.DataFrame.from_dict(my_data)
data = data.T.stack()
data.plot()

Любой знает, какэто можно сделать?

1 Ответ

0 голосов
/ 19 мая 2018

Использование

data.groupby(level=1).plot(stacked=True)

import pandas as pd
import matplotlib.pyplot as plt

my_data = {0: {'a': 1, 'b': 2}, 1: {'a': 1, 'b': 2}}
data = pd.DataFrame.from_dict(my_data)
data = data.T.stack()
# 0  a    1
#    b    2
# 1  a    1
#    b    2
# dtype: int64

data.groupby(level=1).plot(stacked=True, legend=True)
plt.show()

Или, для большего контроля при настройке графика, может быть проще использовать matplotlib напрямую:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.concat({key:pd.Series(np.random.randint(10, size=(10,))) for key in 'AB'}).swaplevel()

fix, ax = plt.subplots()
for key, grp in data.groupby(level=1):
    ax.plot(grp.index.get_level_values(0), grp.values, label=key)
plt.legend()
plt.plot()
plt.show()

enter image description here

...