Поместив буквы, которые вы хотите найти, в список search_for_items
, вы можете получить то, что вы хотите, в две строки
search_for_items = ['A','B','C']
boolean_series = df.apply(lambda x: bool(set(list(x)) & set(search_for_items)), axis=1)
num_of_rows = boolean_series.sum()
Объяснение :
1- Получить элементы, которые нужно найти в списке
2- Получить логическую серию, обнаружив, пересекаются ли два набора хотя бы для одного элемента. Первый набор представляет значения в строке данных. Второй набор представляет элементы, которые вы ищете.
3- Наконец, вы применяете функцию суммирования для суммирования этой серии всякий раз, когда она истинна.
Пример :
import pandas as pd
df = pd.DataFrame({ 'a1':['A','B', 'Z','D','E','F','G'],
'a2':['A','Q', 'C','D','E','F','G'],
'a3':['A','Z', 'Q','D','E','F','G']
})
search_for_items = ['A','B','C']
df
a1 a2 a3
0 A A A
1 B Q Z
2 Z C Q
3 D D D
4 E E E
5 F F F
6 G G G
Решение:
boolean_series = df.apply(lambda x: bool(set(list(x)) & set(search_for_items)), axis=1)
num_of_rows = boolean_series.sum()
num_of_rows
3
, которое вернуло 3, как и ожидалось, поскольку первые три строки в кадре данных содержится A
или B
или C
.