【问题标题】:Number of iems in an array containing a part of string包含部分字符串的数组中的 iem 数
【发布时间】:2020-06-24 12:24:25
【问题描述】:

考虑

df['something'].unique()

这会在变量 something 中生成独特的项目。让我们将其视为一组独特的项目。

array(['aabb','aacc','aadd','bbcc']).

现在我想检查该数组中的任何项目是如何从“aa”开始的。

【问题讨论】:

    标签: python arrays pandas filter


    【解决方案1】:

    Series.str.startswithsum 用于计数 Trues 的 Pandas 解决方案:

    print (pd.Series(df['something'].unique()).str.startswith('aa').sum())
    3
    

    替代方案是Series.drop_duplicates - 那么Series 构造函数不是必需的:

    print (df['something'].drop_duplicates().str.startswith('aa').sum())
    3
    

    或纯 python 解决方案 - 使用 sumstartswith 计数 Trues 的生成器:

    print (sum(x.startswith('aa') for x in df['something'].unique()))
    3
    

    【讨论】:

      【解决方案2】:

      您可以使用re 模块查找任何模式(不仅仅是'aa')

      例如: 如果你有以下数组arr = ['aabb','aacc','aadd','bbcc'],你可以通过这行代码找到以'aa'开头的元素个数:

      len([word for word in arr if re.match(r'aa', word)])
      

      这将为您提供3 的输出,而这一行

      len([word for word in arr if re.match(r'bb', word)])
      

      将显示1

      【讨论】:

        【解决方案3】:

        您可以使用函数startswith()。因此,代码将是:

        number_of_aa = len([x for x in df['something'].unique() if x.startswith('aa')])
        

        使用此方法,您将获得一个过滤列表,其中包含以aa 开头的值,然后使用len 获得计数。如果您不想保留这些值,您可以简单地使用 True/False,然后对这些值求和:

        number_of_aa = [True for x in df['something'].unique() if x.startswith('aa')].sum()
        

        【讨论】:

        • 第二个是sum([True for x in df['something'].unique() if x.startswith('aa')])
        • 或转换为 np.array,但现在不工作 [True for x in df['something'].unique() if x.startswith('aa')].sum()
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2015-08-29
        • 1970-01-01
        • 2020-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多