Mam pandas DF z dwoma zmiennymi ilościowymi A i B.

Chciałbym zbudować wykres zgodnie z opisem w Przykładowej galerii (HTTPS: //altair-viz.github.io/gallery/selection_histogram.html#setection-Histogram).

Nie ma problemu na działce rozproszonej. Ale dla wykresu słupkowego chciałbym przedstawić średnią różnicę między a a b (formuła powinna być: suma (a) / suma (b) -1) tylko dla wyboru pędzla.

Czy istnieje sposób, aby przekazać formułę w argumencie X w poniższym kodzie?

chart1 = alt.Chart(df).mark_bar().encode(
    #y='Origin:N',
    #color='Origin:N',
    x='sum(A)/sum(B)-1'
).transform_filter(
    brush
)

Dzięki za wszelką pomoc

1
Bebio 22 listopad 2020, 21:55

1 odpowiedź

Najlepsza odpowiedź

Spójrz na <-a href="https://altair-viz.github.io/user_guide/transform/aggregate.html" ren="nofollow NefErrer"> Agregate Transformal i Oblicz przekształcenie

Wyglądałoby to mniej więcej tak:

chart = alt.Chart(df).transform_filter(
    brush
).transform_aggregate(
    sum_A = 'sum(A)',
    sum_B = 'sum(B)',
    groupby=['Origin']
).transform_calculate(
    diff = 'datum.sum_A / datum.sum_B - 1'
).mark_bar().encode(
    y='Origin:N',
    color='Origin:N',
    x='diff:Q'
)

Ogólnie rzecz biorąc, kolejność transformacji ma znaczenie: na przykład, wkładając najpierw transform_filter, suma zostaną obliczone na wartości filtrowanych.

1
jakevdp 23 listopad 2020, 14:00