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

ryu*_*nho 4 python arrays string numpy pandas

我有包含字符串值的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)  
Run Code Online (Sandbox Code Playgroud)

我尝试过bincount但它不适用于这种类型的数据.

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

cs9*_*s95 11

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])
Run Code Online (Sandbox Code Playgroud)

pd.value_counts

pd.value_counts(l)

bar     3
bus     2
café    2
dtype: int64

# <=0.23
pd.value_counts(l).values
# 0.24+
pd.value_counts(l).to_numpy()
# array([3, 2, 2])
Run Code Online (Sandbox Code Playgroud)

只是打电话import pandas as pd来获取那些计数pd.factorize.

np.bincount(pd.factorize(l)[0])
# array([2, 3, 2])
Run Code Online (Sandbox Code Playgroud)

pd.get_dummies

pd.get_dummies(l).sum()

bar     3
bus     2
café    2
dtype: int64
Run Code Online (Sandbox Code Playgroud)

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])
Run Code Online (Sandbox Code Playgroud)

略微迂回,但有趣的是.