从pandas DataFrame索引获取布尔数组(或生成器)

时间:2014-09-16 15:18:47

标签: python pandas dataframe multi-index

我有一个与此类似的索引pandas DataFrame:

import pandas as pd

df = pd.DataFrame({'type':['good','good','bad'], 'nr':[0,1,2], 'value':[1,2,3]})

df.set_index(['type','nr'], inplace=True)

df
Out[153]:

        | value
type nr |
--------+-------
good  0 |   1
      1 |   2
--------+-------
bad   2 |   3

我想将值(使用matplotlib)与指标'good'/'bad'一起绘制。对于这个指标,一个0/1 numpy数组就足够了 - 0表示数据为'bad',1表示数据为'good'。但数据集非常大,我更喜欢生成器,而不是实际的数组。

我不知道如何从df创建此数组/生成器。我需要像这样使用它:

import matplotlib.pyplot as plt

plt.figure()
plt.plot(good_or_bad_indicator)
plt.plot(df)
plt.show()

有人可以帮忙吗?

PS:我更喜欢基于lambda函数的解决方案,因为在我的实际情况中,'type'列中有两个以上的值,我可能想设计一个更复杂的指标来绘制。

1 个答案:

答案 0 :(得分:2)

有几种方法可以获得指标:

df.index.get_level_values(0) == 'good'

是最简单的。如果您有多个"好"还要查看isin。选项。你也可以迭代索引,如果你想要更复杂的东西(而不是x[0] ==把一个lambda或方法放在x上):

[x[0] == 'good' for x in df.index]

如果您需要整行,可以使用df.iterrows()