获取pandas multiindex数据帧中索引的标签

时间:2017-01-12 12:05:01

标签: python-3.x pandas

我有一个数据帧df

                   c1     c2  
name       sample
person1    a1      aaa    AAA  
           b1      bbb    BBB  
           c1      ccc    CCC  
person2    d1      ...  

我希望一次一个人遍历数据框,并检查列中的值是否符合条件。如果我得到一个匹配,那么我想提取该索引的标签(在级别[1]和一个字符串),并创建一组所有这样的索引。所以说我的标准是column_value == bbb,那么我想得到" b1"

以下几乎产生了我想要的东西,但它返回了一组生成器对象,而不是标签的名称作为字符串。

index_set = set()
for person, new_df in df.groupby(level=0):
    idx = new_df.index.get_level_values(1).tolist()
    index_set.add(x for x in idx) 

产生类似0x0000022F6F05D200>的东西,位于0x0000022F6F05D410>,....

那么如何让它产生类似{" b1"," f1"," h1",...}的内容呢?

另一个问题:当通过创建new_df迭代df时,索引名称似乎不会转移到new_df。这可以以某种方式避免吗?如果我可以将索引称为get_level_values(' sample')而不是get_level_values(1)

,那么它将使代码更具可读性

1 个答案:

答案 0 :(得分:1)

集合的add方法会添加一个元素,在您的情况下,它会添加一个迭代器。您可以使用列表推导添加一些:[index_set.add(x) for x in idx],但正确的方法是使用update方法:

index_set.update(idx)