如何在字符串数组上执行bincount?

时间:2017-09-30 13:49:22

标签: python arrays string pandas numpy

我有包含字符串值的NumPy数组。

例如:[“bus”,“bar”,“bar”,“café”.....]

计算数组中每个元素出现次数的最佳方法是什么。我目前的解决方案是:

# my_list contains my data.
bincount = []
for name in set(my_list.tolist()):
    count = sum([1 for elt in my_list if elt == name])
    bincount.append(count)  

我尝试过bincount,但它不适用于此类数据。

您知道更好的解决方案吗?

2 个答案:

答案 0 :(得分:7)

np.unique

l = ['bus', 'bar', 'bar', 'café', 'bus', 'bar', 'café']
a, b = np.unique(l, return_counts=True)

a
array(['bar', 'bus', 'café'],
      dtype='<U4')

b
array([3, 2, 2])

pd.value_counts

pd.value_counts(l)

bar     3
bus     2
café    2
dtype: int64

只需致电.values即可在array中获取这些统计数据。

pd.value_counts(l).values
array([3, 2, 2])

pd.factorize

np.bincount(pd.factorize(l)[0])
array([2, 3, 2])

pd.get_dummies

import pandas as pd

pd.get_dummies(l)

   bar  bus  café
0    0    1     0
1    1    0     0
2    1    0     0
3    0    0     1
4    0    1     0
5    1    0     0
6    0    0     1

pd.get_dummies.sum()

bar     3
bus     2
café    2
dtype: int64

略微迂回,但仍然很有趣。

答案 1 :(得分:0)

你也可以在python中使用字典。

result_dict = {}
l = ['bus', 'bar', 'bar', 'café', 'bus', 'bar', 'café']
for ele in l:
    result_dict[ele] = 1 if ele not in result_dict else result_dict[ele] + 1

然后打印结果:

for key in result_dict:
    print key, result_dict[key]

reuslt:

bus 2
bar 3
café 2