使用pandas绘制多索引数据

时间:2018-05-19 12:17:08

标签: python pandas plot multi-index

我有一个Python字典:

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

我使用DataFrame从中创建了一只Pandas from_dict()。这给了我一个多索引数据框,正如预期的那样。

现在我想绘制这个数据帧,外部索引是x轴,内部索引是我图中的单独行,y轴上的数据点是值。

我试过堆叠它们,但它只给了我一行。

我目前的代码:

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

任何人都知道如何做到这一点?

1 个答案:

答案 0 :(得分:4)

使用

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