使用 pandas 进行多索引和绘图

Posted

技术标签:

【中文标题】使用 pandas 进行多索引和绘图【英文标题】:MultiIndexing and plotting using pandas 【发布时间】:2019-07-26 06:14:55 【问题描述】:

我想将此 pandas DataFrame 绘制为三个 2D 线:no_transfer、transfer 和 random_transfer,其中每条线都是从 0 到 9 列。DataFrame 有一个 MultiIndex。我还想摆脱“is_greedy”级别,因为值对所有人都是一样的。

                              0    1     2     3  ...      6     7     8     9
config          is_greedy                         ...                         
no_transfer     True        9.0  9.0  14.0  15.0  ...   16.5  15.0  11.0   9.5
transfer        True        9.0  9.5  27.5  10.5  ...   19.5  55.5  14.0  24.0
random_transfer True       35.5  9.0  13.5  10.0  ...   10.0  13.0  27.5  32.0

【问题讨论】:

【参考方案1】:

删除索引级别,转置和绘图。

df.reset_index('is_greedy', drop=True).T.plot()

样本数据

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(30, 50, (3, 11)), 
                  index=['no_transfer', 'transfer', 'random_transfer'])
df = df.set_index(10, append=True)
df.index.names=['config', 'is_greedy']
#                            0   1   2   3   4   5   6   7   8   9
#config          is_greedy                                        
#no_transfer     40         35  49  47  36  48  47  39  48  38  32
#transfer        33         35  33  45  38  38  45  36  30  46  36
#random_transfer 36         32  41  36  41  37  35  40  42  49  32

df.reset_index('is_greedy', drop=True).T.plot()


或者遍历行:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
for idx, row in df.iterrows():
    ax.plot(df.columns, row, label=idx[0])
plt.legend()
plt.show()

【讨论】:

以上是关于使用 pandas 进行多索引和绘图的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas 按多索引和列排序

带有多索引和 parse_date 的 pandas read_excel;如何?

从多索引数据框中进行多次绘图

在 NumPy 中跟踪多索引和修改值

绘制 Pandas 多索引条形图

使用多索引值绘图