如何测试有序子集

时间:2016-10-19 03:59:57

标签: python pandas

首先
我需要能够测试'abc''axbyc'的有序子集,而'egd'不是'edg'的有序子集。另一种说法是,如果我可以删除一个字符串的特定字符并使其等于另一个字符串,则它是一个有序的子集。

其次
我需要将一个pd.Series与另一个pd.Series进行比较,以确定一个元素是否是另一个元素的相应元素的有序子集。

考虑pd.Series s1s2

s1 = pd.Series(['abc', 'egd'])
s2 = pd.Series(['axbyc', 'edg'])

我需要将它们与问题的结果进行比较 s1的有序子集s2的元素是否等于

0     True
1    False
dtype: bool

2 个答案:

答案 0 :(得分:2)

问题的第一部分:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="submit" class="btn btn-lg rounded metro btn-primary" id="button1" value="Save">       
<input type="submit" class="btn btn-lg rounded metro btn-primary" id="button2" value="Save">

问题的第二部分:

def ordered_subset(s1, s2):
    s2 = iter(s2)
    try:
        for c in s1:
            while next(s2) != c:
                pass
        else:
            return True
    except StopIteration:
        return False

答案 1 :(得分:1)

使用'.*'.join创建一个与序列匹配的正则表达式模式。

import re
import pandas as pd

s1 = pd.Series(['abc', 'egd'])
s2 = pd.Series(['axbyc', 'edg'])

match = lambda x: bool(re.match(*x))
pd.concat([s1.str.join('.*'), s2], axis=1).T.apply(match)

0     True
1    False
dtype: bool

请注意

s1.str.join('.*')

0    a.*b.*c
1    e.*g.*d
Name: x, dtype: object