Гистограмма, сгруппированная пандами

#pandas #dataframe #matplotlib #plotly #bar-chart

Вопрос:

У меня есть фрейм данных pandas df, который выглядит так:

     Timestamp           ProductID.       OrderCount

  6/29/21 10:00       50100100200100       8
  6/29/21 10:00       50100100200101       7
  6/29/21 11:00       50100100200102       5
  6/29/21 11:00       50100100200105       8
  6/29/21 11:00       50100100200101      12
  6/29/21 12:00       50100100200109       4
  6/29/21 12:00       50100100200111       5
 

Тип данных метки времени-datetime64[ns], ProductID и количество заказов-float64 и int64 соответственно.

Я хочу построить столбчатую диаграмму, на которой по оси X товары будут сгруппированы по метке времени, а высота столбиков будет значением количества заказов.

До сих пор я пробовал это:

   import pandas as pd
  from datetime import datetime
  import plotly.express as px
  import plotly.graph_objects as go
  import plotly.io as pio

  barchart = px.bar( 
       data_frame = df,
       x = "Timestamp",
       y = "OrderCount",
       orientation = "v",
       barmode = 'group',
  )  

  pio.show(barchart)
 

но это складывает значения количества заказов и выводит 15 для метки времени==6/29/21 10:00 вместо построения 8 и 7 в виде отдельных полос. Панды здесь новичок, так что помощь очень ценится.

Ответ №1:

Целью группировки по оси X является временной ряд и идентификатор продукта. поэтому вам нужно указать ProductID. из-за цвета. Идентификатор интерпретируется как числовое значение, и отображается цветовая полоса, поэтому вам необходимо заранее преобразовать идентификатор в строку.

 import pandas as pd
from datetime import datetime
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio

barchart = px.bar(
    data_frame = df,
    x = "Timestamp",
    y = "OrderCount",  
    color="ProductID.",
    orientation = "v",
    barmode = 'group',
)  

pio.show(barchart)
 

введите описание изображения здесь

Комментарии:

1. Вы можете найти официальную ссылку здесь . Кроме того, если мой ответ был вам полезен, есть кнопка «Проверить», чтобы проверить и принять его.

Ответ №2:

Альтернатива:

 df.pivot(*df).plot(kind='bar')
 

выход:

введите описание изображения здесь