【发布时间】:2020-06-24 12:24:25
【问题描述】:
考虑
df['something'].unique()
这会在变量 something 中生成独特的项目。让我们将其视为一组独特的项目。
array(['aabb','aacc','aadd','bbcc']).
现在我想检查该数组中的任何项目是如何从“aa”开始的。
【问题讨论】:
标签: python arrays pandas filter
考虑
df['something'].unique()
这会在变量 something 中生成独特的项目。让我们将其视为一组独特的项目。
array(['aabb','aacc','aadd','bbcc']).
现在我想检查该数组中的任何项目是如何从“aa”开始的。
【问题讨论】:
标签: python arrays pandas filter
Series.str.startswith 和 sum 用于计数 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 解决方案 - 使用 sum 和 startswith 计数 Trues 的生成器:
print (sum(x.startswith('aa') for x in df['something'].unique()))
3
【讨论】:
您可以使用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
【讨论】:
您可以使用函数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')])
[True for x in df['something'].unique() if x.startswith('aa')].sum()