如何通过熊猫带来计数

时间:2021-05-07 04:37:21

标签: python pandas

我有一个帐号列表,并与它相对应,我正在尝试计算重复帐号的数量。以下是示例数据集:

a=['2',
'6',
'03 10103538 2222 1233 6160 0142',
'03 10103538 2222 1233 6160 0141',
'30 10103538 2222 1233 6160 0141',
'30 10103538 2222 1233 6160 0142',
'30 10103538 2222 1233 6160 0141',
'30 10103538 2222 1233 6160 0142',

'5',
'30 10103538 2222 1233 6160 0144',
'30 10103538 2222 1233 6160 0142',
'30 10103538 2222 1233 6160 0145',
'30 10103538 2222 1233 6160 0146',
'30 10103538 2222 1233 6160 0143']

我尝试了以下代码:

import collections
print collections.Counter(a)

但它没有给出结果

我想要的结果应该是这样的:

b=[
'03 10103538 2222 1233 6160 0142','1'
'03 10103538 2222 1233 6160 0141','1'
'30 10103538 2222 1233 6160 0141','1'
'30 10103538 2222 1233 6160 0142','3'
'30 10103538 2222 1233 6160 0141','1'
'30 10103538 2222 1233 6160 0142','1'
'30 10103538 2222 1233 6160 0144','1'
'30 10103538 2222 1233 6160 0142','3'
'30 10103538 2222 1233 6160 0145','1'
'30 10103538 2222 1233 6160 0146','1'
'30 10103538 2222 1233 6160 0143','1']

2 个答案:

答案 0 :(得分:0)

当您标记了熊猫时,让我们使用 .groupby.size

import pandas as pd 


df = pd.DataFrame(a,columns=['data'])
values = df.loc[df['data'].str.len() > 1].groupby(
                         ['data'],as_index=False).size().values


array([['03 10103538 2222 1233 6160 0141', 1],
       ['03 10103538 2222 1233 6160 0142', 1],
       ['30 10103538 2222 1233 6160 0141', 2],
       ['30 10103538 2222 1233 6160 0142', 3],
       ['30 10103538 2222 1233 6160 0143', 1],
       ['30 10103538 2222 1233 6160 0144', 1],
       ['30 10103538 2222 1233 6160 0145', 1],
       ['30 10103538 2222 1233 6160 0146', 1]], dtype=object)

如果您希望数据具有其原始索引,您可以将 .groupby.transform 结合使用,后者应用 groupby 操作而不修改索引。

df.assign(val=df.groupby(['data'])['data'].transform('size'))\
         .loc[df['data'].str.len() > 1].values


array([['03 10103538 2222 1233 6160 0142', 1],
       ['03 10103538 2222 1233 6160 0141', 1],
       ['30 10103538 2222 1233 6160 0141', 2],
       ['30 10103538 2222 1233 6160 0142', 3],
       ['30 10103538 2222 1233 6160 0141', 2],
       ['30 10103538 2222 1233 6160 0142', 3],
       ['30 10103538 2222 1233 6160 0144', 1],
       ['30 10103538 2222 1233 6160 0142', 3],
       ['30 10103538 2222 1233 6160 0145', 1],
       ['30 10103538 2222 1233 6160 0146', 1],
       ['30 10103538 2222 1233 6160 0143', 1]], dtype=object)

答案 1 :(得分:0)

这是另一个使用 Counter 的解决方案,

from collections import Counter

list(Counter(i for i in a if len(i) > 1).items())

[('03 10103538 2222 1233 6160 0142', 1),
 ('03 10103538 2222 1233 6160 0141', 1),
 ('30 10103538 2222 1233 6160 0141', 2),
 ('30 10103538 2222 1233 6160 0142', 3),
 ('30 10103538 2222 1233 6160 0144', 1),
 ('30 10103538 2222 1233 6160 0145', 1),
 ('30 10103538 2222 1233 6160 0146', 1),
 ('30 10103538 2222 1233 6160 0143', 1)]
相关问题