如果每个国家/地区代码的数量少于5

时间:2016-08-13 16:56:14

标签: python loops pandas dataframe

如果特定国家/地区代码的计数或频率小于5,我会尝试收到警告或打印消息。

QuoteID
1500759-BE
1500759-BE
1500759-BE
1500759-BE
1605101-FR
1605101-FR
1605101-FR
1605119-FR
1605119-FR
1605119-FR
1605119-FR
1605119-FR
1600896-NL
1600896-NL
1600896-NL
1600898-NL
1600898-NL
1600898-NL
1600898-NL
1600898-NL
1600898-NL

尝试以下代码

chars=('BE','FR','NL')
check_string=OutputData['QuoteID']

for char in chars:
  count = check_string.count(char)
  if count < 5:
    print ('count is less than 5 )

预期结果是 - “警告”类别BE'少于5条记录“

OutputData - 数据集名称
QuoteID - 变量名称

1500759-BE之类的值是变量中的值,“BE”,“FR”和“NL”的频率或计数必须计算,如果count小于5,则需要警告消息。

非常感谢提前

2 个答案:

答案 0 :(得分:0)

您可以使用Python Counter模块提供的collections来计算列表中元素的出现次数。 此外,您可以通过拆分所有行并删除每行的最后两个元素(即国家/地区代码)来提取样本数据中给出的国家/地区代码。

总而言之,我会建议这样的事情:

from collections import Counter

data = """1500759-BE
1500759-BE
1500759-BE
1500759-BE
1605101-FR
1605101-FR
1605101-FR
1605119-FR
1605119-FR
1605119-FR
1605119-FR
1605119-FR
1600896-NL
1600896-NL
1600896-NL
1600898-NL
1600898-NL
1600898-NL
1600898-NL
1600898-NL
1600898-NL
"""

codes = [l[-2:] for l in data.splitlines()]

c = Counter(codes)

for k,v in c.items():
    if v < 5:
        print('less then 5 items for {}'.format(k))

当您使用python-2.7标记问题时,您需要记住将我提供的Python3代码转换为Python2等效代码。也就是说,您需要使用print output代替print(output).items()将成为.iteritems()

答案 1 :(得分:0)

您可以使用str.extract从每个QuoteID字符串中提取国家/地区代码,如下所示:

In [16]: df['CountryCode'] = df['QuoteID'].str.extract('(?P<letter>BE|FR|NL)', expand=True)

In [17]: df
Out[17]: 
       QuoteID CountryCode
0   1500759-BE          BE
1   1500759-BE          BE
2   1500759-BE          BE
3   1500759-BE          BE
4   1605101-FR          FR
5   1605101-FR          FR
6   1605101-FR          FR
7   1605119-FR          FR
8   1605119-FR          FR
9   1605119-FR          FR
10  1605119-FR          FR
11  1605119-FR          FR
12  1600896-NL          NL
13  1600896-NL          NL
14  1600896-NL          NL
15  1600898-NL          NL
16  1600898-NL          NL
17  1600898-NL          NL
18  1600898-NL          NL
19  1600898-NL          NL
20  1600898-NL          NL

通过使用value_counts计算唯一值的计数,您可以通过调用series后跟to_dict()list-comprehension对象转换为字典,以获得期望的结果。

In [18]: ["count of %s is %d" % (key, value) if value > 5 else   \
         "WARN!: count of category %s is less than 5" % (key)    \
         for key, value in df['CountryCode'].value_counts().to_dict().items()]
Out[18]: 
['WARN!: count of category BE is less than 5',
 'count of NL is 9',
 'count of FR is 8']