"Вручную" создайте фрейм данных с суммированными частотами, затем отфильтруйте и отобразите его, как кажется, хороший подход.
Чтобы получить всех пользователей с частотой не менее 90, используйте
grouped_users.loc[grouped_users.freq >= 90]
Чтобы также ограничить максимум, необходимы логические значения и (&
) и скобки:
grouped_users.loc[(grouped_users.freq >= 90) & (grouped_users.freq <= 100)]
Некоторый демонстрационный код для сравнения с исходным сюжетом:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import string
np.random.seed(12345)
k = 5
N = 100
users = pd.DataFrame({'freq': np.random.randint(k, k + 100, size=N),
'id': np.random.choice(list(string.ascii_uppercase), N)})
x0 = 90
x1 = 100
grouped_users = users.groupby('id')[['id', 'freq']].sum()
grouped_users_filtered = grouped_users.loc[grouped_users.freq >= x0]
fig, (ax0, ax1) = plt.subplots(ncols=2)
ax0.barh(users.id, users.freq)
ax1.barh(grouped_users_filtered.index, grouped_users_filtered.freq)
for ax in (ax0, ax1):
ax.set(xlim=[x0, x1], xlabel='Frequency', ylabel='ID', title='Match')
plt.show()
![result](https://i.stack.imgur.com/z1cYQ.png)