使用 pandas DataFrame 获取第 10 个最频繁值的计数
Using a pandas DataFrame to get the count of the 10th most frequent value
我有一个 DataFrame,其中包含 place_ids 的条目,例如:
place_id
11111
11111
22222
33333
44444
44444
...
我想得到第 10 个最频繁值的计数。
这是我想出的:
print df.place_id.value_counts().nlargest(10).tail(1).values[0]
这看起来工作量太大了。有没有更简单的方法来获取第 10 个最频繁的计数 place_id?
尝试:
import pandas as pd
import numpy as np
from string import ascii_letters
np.random.seed([3,1415])
s = pd.Series(np.random.choice(list(ascii_letters), (10000,)))
vc = s.value_counts().sort_values()
vc.loc[[vc.index[-10]]]
j 204
dtype: int64
我认为你已经有了一个不错的解决方案。这是一个稍微快一点但对于所有实际目的具有相同性能的替代方案:
In [165]: place_ids.value_counts().nlargest(10).tail(1).values[0]
Out[165]: 1057
In [166]: place_ids.value_counts().sort_values().iloc[-10]
Out[166]: 1057
仅供参考,对于不需要 Series 对象的小列表,我喜欢集合中的计数器 class(显然,如果您需要转换大对象,这会慢很多):
from collections import Counter
print Counter(place_ids).most_common(10)[-1][1] # reports 1057
我有一个 DataFrame,其中包含 place_ids 的条目,例如:
place_id
11111
11111
22222
33333
44444
44444
...
我想得到第 10 个最频繁值的计数。
这是我想出的:
print df.place_id.value_counts().nlargest(10).tail(1).values[0]
这看起来工作量太大了。有没有更简单的方法来获取第 10 个最频繁的计数 place_id?
尝试:
import pandas as pd
import numpy as np
from string import ascii_letters
np.random.seed([3,1415])
s = pd.Series(np.random.choice(list(ascii_letters), (10000,)))
vc = s.value_counts().sort_values()
vc.loc[[vc.index[-10]]]
j 204
dtype: int64
我认为你已经有了一个不错的解决方案。这是一个稍微快一点但对于所有实际目的具有相同性能的替代方案:
In [165]: place_ids.value_counts().nlargest(10).tail(1).values[0]
Out[165]: 1057
In [166]: place_ids.value_counts().sort_values().iloc[-10]
Out[166]: 1057
仅供参考,对于不需要 Series 对象的小列表,我喜欢集合中的计数器 class(显然,如果您需要转换大对象,这会慢很多):
from collections import Counter
print Counter(place_ids).most_common(10)[-1][1] # reports 1057