我有包含字符串值的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,但它不适用于此类数据。
您知道更好的解决方案吗?
答案 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