【问题标题】:Plotting multi indexed data with pandas用 pandas 绘制多索引数据
【发布时间】:2018-10-29 17:10:15
【问题描述】:

我有一个 Python 字典,格式为:

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

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

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

我尝试将它们堆叠起来,但它只给了我一行。

我当前的代码:

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

有人知道如何做到这一点吗?

【问题讨论】:

  • 请不要在内置函数后命名变量。例如,使用d 而不是dict

标签: python pandas plot multi-index


【解决方案1】:

使用

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()

【讨论】:

  • groupby 命令正是我所需要的。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 2016-12-31
  • 2013-12-03
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2014-10-12
相关资源
最近更新 更多