想象我有一个如下所示的列表:
patterns = [
'HHM,HHM',
'HHM,MHH',
'HHM,LLL',
]
还有一个熊猫系列,看起来像这样:
data = {
93: 'LLL,HLH,LHL,HHH,LML,LML,HLH,HHH,LLL,LHL,MHM,LLM',
107: 'LML,HLH,HHH,LLL,LHL,MHM,LLL,HHH,LLM,HMH,LLM,HMM',
145: 'MHM,LLL,HHH,LLM,HMH,LLM,HMH,HMM,HLH,MMH,MML,LHH',
}
series = pd.Series(data)
如何匹配
series
中包含任意数量的patterns
中的整个元素的行,例如“嗯,LLL”?
我使用了以下包含一些模式的数据。
data = {
93: 'HHM,HHM,LHL,HHH,LML,LML,HLH,HHH,LLL,HHM,HHM,LLM',
107: 'LML,HLH,HHM,MHH,LHL,MHM,LLL,HHM,HHM,HMH,LLM,HMM',
145: 'MHM,LLL,HHH,LLM,HHM,LLL,HMH,HMM,HLH,MMH,MML,LHH',
}
patterns = ['HHM,HHM','HHM,MHH','HHM,LLL']
我不确定您希望输出如何显示,所以我现在只是使用一个简单的字典来存储结果。
# Dictionary to store the matching patterns and their corresponding numbers
matching_patterns = {}
# Iterate over each number and check if any pattern matches
for number, values in data.items():
for pattern in patterns:
if pattern in values:
matching_patterns.setdefault(pattern, []).append(number)
这会产生一个输出:
{'HHM,HHM': [93, 107], 'HHM,MHH': [107], 'HHM,LLL': [145]}
。
如果您想要更紧凑的东西,您可以尝试:
matching_patterns2 = {pattern: [num for num, values in data.items() if pattern in values] for pattern in patterns}
您甚至可以使用正则表达式并尝试:
import re
# Dictionary to store the matching patterns and their corresponding numbers
matching_patterns3 = {}
# Iterate over patterns and check if any pattern exists in the series using regex
for pattern in patterns:
regex_pattern = re.compile(r'\b' + re.escape(pattern) + r'\b')
matches = series[series.str.contains(regex_pattern, regex=True)].index.tolist()
if matches:
matching_patterns3[pattern] = matches
希望这会有所帮助。