我有一个数据帧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)
,那么它将使代码更具可读性答案 0 :(得分:1)
集合的add
方法会添加一个元素,在您的情况下,它会添加一个迭代器。您可以使用列表推导添加一些:[index_set.add(x) for x in idx]
,但正确的方法是使用update
方法:
index_set.update(idx)