Метод pandas.DataFrame.query()
отлично подходит для (до/после) фильтрации данных при загрузке или построении графика. Это особенно удобно для цепочки методов.
Мне часто хочется применить ту же логику к pandas.Series
, например. после выполнения такого метода, как df.value_counts
, который возвращает pandas.Series
.
Пример
Предположим, есть огромная таблица со столбцами Player, Game, Points
, и я хочу построить гистограмму игроков с более чем 14 умножениями на 3 очка. Сначала я должен суммировать очки каждого игрока (groupby -> agg
), что вернет серию из ~ 1000 игроков и их общее количество очков. Применяя логику .query
, это будет выглядеть примерно так:
df = pd.DataFrame({
'Points': [random.choice([1,3]) for x in range(100)],
'Player': [random.choice(["A","B","C"]) for x in range(100)]})
(df
.query("Points == 3")
.Player.values_count()
.query("> 14")
.hist())
Единственные решения, которые я нахожу, заставляют меня выполнять ненужное задание и разбивать цепочку методов:
(points_series = df
.query("Points == 3")
.groupby("Player").size()
points_series[points_series > 100].hist()
Цепочка методов, а также метод запроса помогают сохранить разборчивость кода, в то время как фильтрация подмножеств может довольно быстро запутаться.
# just to make my point :)
series_bestplayers_under_100[series_prefiltered_under_100 > 0].shape
Пожалуйста, помогите мне в моей дилемме! Спасибо