将 pandas 系列中的字符串值与列表中的值进行匹配

问题描述 投票:0回答:1

想象我有一个如下所示的列表:

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”?

python pandas
1个回答
0
投票

我使用了以下包含一些模式的数据。

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

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.