就我而言,我有一个 panda 系列,其中的值是字符元组:
Out[67]
0 (H, H, H, H)
1 (H, H, H, T)
2 (H, H, T, H)
3 (H, H, T, T)
4 (H, T, H, H)
因此我可以使用索引来过滤系列,但要创建我需要apply 的索引。我的条件是“找到所有只有一个'H'的元组”。
series_of_tuples[series_of_tuples.apply(lambda x: x.count('H')==1)]
我承认它不是“可链接的”,(即注意我重复series_of_tuples 两次;您必须将任何临时系列存储到一个变量中,以便您可以对其调用 apply(...) )。
可能还有其他方法(除了.apply(...))可以逐元素操作以生成布尔索引。
许多其他答案(包括接受的答案)使用可链接的函数,例如:
.compress()
.where()
.loc[]
[]
这些接受可调用 (lambdas)应用于系列,而不是应用于这些系列中的单个 值!
因此,当我尝试将上述条件 / 可调用 / lambda 与任何可链接函数(如 .loc[])一起使用时,我的元组系列表现异常:
series_of_tuples.loc[lambda x: x.count('H')==1]
产生错误:
KeyError: 'Level H must be same as name (None)'
我很困惑,但它似乎在使用 Series.count series_of_tuples.count(...) function ,这不是我想要的。
我承认另一种数据结构可能更好:
- 类别数据类型?
- 一个数据框(元组的每个元素都变成一列)
- 一系列字符串(只需将元组连接在一起):
这会创建一系列字符串(即通过连接元组;将元组中的字符连接到单个字符串上)
series_of_tuples.apply(''.join)
这样我就可以使用chainable Series.str.count
series_of_tuples.apply(''.join).str.count('H')==1