我有一个帐号列表,并与它相对应,我正在尝试计算重复帐号的数量。以下是示例数据集:
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']
答案 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)]