Этот вопрос является почти дубликатом этого , с некоторыми изменениями.
Возьмите следующий фрейм данных и найдите позиции столбцов, которые имеют "sch" или "оа "в них.Достаточно просто в R:
df <- data.frame(cheese = rnorm(10),
goats = rnorm(10),
boats = rnorm(10),
schmoats = rnorm(10),
schlomo = rnorm(10),
cows = rnorm(10))
grep("oa|sch", colnames(df))
[1] 2 3 4 5
write.csv(df, file = "df.csv")
Теперь, в Python, я мог бы использовать некоторое подробное понимание списка:
import pandas as pd
df = pd.read_csv("df.csv", index_col = 0)
matches = [i for i in range(len(df.columns)) if "oa" in df.columns[i] or "sch" in df.columns[i]]
matches
Out[10]: [1, 2, 3, 4]
Я хотел бы знать, если есть лучшеспособ сделать это в Python, чем приведенный выше пример понимания списка .В частности, что, если у меня есть десятки строк, чтобы соответствовать.В R я мог бы сделать что-то вроде
regex <- paste(vector_of_strings, sep = "|")
grep(regex, colnames(df))
Но не очевидно, как это сделать, используя списочное понимание в python .Может быть, я мог бы использовать манипуляции со строками, чтобы программно создать строку, которая будет выполняться внутри списка, чтобы справиться со всеми повторяющимися операторами or
?