Установка отсчета () отсечки в Альтаире?
Вот простой сюжет с использованием альтаира:
import altair as alt
import pandas as pd
df = pd.DataFrame([['a',2],['a',3],['b',4],['b',5],['b',4],['c',8]], columns=['Letters', 'Numbers'])
Я готовлю count()
для каждой буквы: так a:2
, b:3
, а также c:1
,
chart = alt.Chart(df).mark_bar().encode(
alt.X('Letters:N', sort=alt.EncodingSortField(op='count', order='descending')),
alt.Y('count():Q'))
Как я могу отфильтровать данные так, чтобы, например, count()
должно быть>= 2, поэтому только a
а также b
строятся? Я знаю как это сделать с pandas
, но хотел бы сделать все это в один шаг с altair
,
1 ответ
Решение
Вы можете сделать это с помощью агрегатного преобразования, за которым следует преобразование фильтра:
alt.Chart(df).transform_aggregate(
count='count()',
groupby=['Letters']
).transform_filter(
'datum.count >= 2'
).mark_bar().encode(
alt.X('Letters:N', sort=alt.EncodingSortField(op='count', order='descending')),
alt.Y('count:Q')
)
https://stackru.com/images/5c662e689705d92442e6dd1791d b4a482a5cf772.png