我的数据框df带有一个名为“groups”的列。它看起来像下面 -
groups
[u'CN=MyUsers,OU=Groups,DC=sample,DC=com',u'CN=Sample-Users,OU=Groups,DC=sample,DC=com']
[u'CN=MyUsers,OU=Groups,DC=sample,DC=com',u'CN=Sample-Users,OU=Groups,DC=sample,DC=com',u'CN=MoreUsers,OU=Groups,DC=sample,DC=com']
第一行包含2组,第二行包含3组。我想计算整列中每个唯一组的数量。所以我的结果数据框应该说 -
Group Count
u'CN=MyUsers,OU=Groups,DC=sample,DC=com' 2
u'CN=Sample-Users,OU=Groups,DC=sample,DC=com' 2
u'CN=MoreUsers,OU=Groups,DC=sample,DC=com' 1
我将如何完成此任务。我在尝试 -
res=df.groups.apply(pd.Series).stack().value_counts()
但这并没有给我预期的结果。这不会影响个别群体的数量。
答案 0 :(得分:1)
对于列中的每个元素,您可以执行以下操作:
#if column1 = [u'CN=MyUsers,OU=Groups,DC=sample,DC=com',u'CN=Sample-Users,OU=Groups,DC=sample,DC=com']
#if column2 = [u'CN=MyUsers,OU=Groups,DC=sample,DC=com',u'CN=Sample-Users,OU=Groups,DC=sample,DC=com',u'CN=MoreUsers,OU=Groups,DC=sample,DC=com']
count_dict = dict()
for column in YOUR_DATA_SHEET:
for element in column:
if element in count_dict.keys():
count_dict[element] += 1
else:
count_dict[element] = 1
这样你就可以有一个字典来记录元素及其数量。
答案 1 :(得分:1)
这应该有效:
from itertools import chain
pd.DataFrame(map(lambda x: (x, 1), chain.from_iterable(df.groups.values))).groupby(0, as_index=False).sum().rename(columns={0:'Group', 1:'Count'})
Group Count
0 CN=MoreUsers,OU=Groups,DC=sample,DC=com 1
1 CN=MyUsers,OU=Groups,DC=sample,DC=com 2
2 CN=Sample-Users,OU=Groups,DC=sample,DC=com 2
也是这样的:
pd.DataFrame(list(chain.from_iterable(df.groups.values)), columns=['Group']).Group.value_counts()
CN=Sample-Users,OU=Groups,DC=sample,DC=com 2
CN=MyUsers,OU=Groups,DC=sample,DC=com 2
CN=MoreUsers,OU=Groups,DC=sample,DC=com 1
时间测试:
%timeit pd.DataFrame(list(chain.from_iterable(df.groups.values)), columns=['Group']).Group.value_counts()
1000 loops, best of 3: 899 µs per loop
%timeit pd.DataFrame(list(chain.from_iterable(df.groups.values))).groupby(0, as_index=False).sum().rename(columns={0:'Group', 1:'Count'})
100 loops, best of 3: 5.5 ms per loop