Эффективно назначить гистограмму из панд DF - PullRequest
0 голосов
/ 29 июня 2018

В настоящее время я вручную создаю bar chart из pandas df. Есть ли более эффективный способ прочитать его прямо с df?

import pandas as pd
import matplotlib.pyplot as plt

d = ({
    'A' : ['1','1','1','2','2','2','3','3','3','3'],     
    'B' : ['A','B','C','A','B','C','D','A','B','C'],
    'C' : ['John','Carl','Carl','John','Lily','John','Lily','John','Carl','Carl'],         
    })

df = pd.DataFrame(data=d)

fig,ax = plt.subplots(figsize = (3,3))

Ay = [3]
Ax = [1]

By = [2,1]
Bx = [7,12]

Cy = [1,2]
Cx = [3,8]

Dy = [1]
Dx = [14]

plt.bar(Ax,Ay, label = 'A')
plt.bar(Bx,By, label = 'B')
plt.bar(Cx,Cy, label = 'C')
plt.bar(Dx,Dy, label = 'D')

plt.legend(loc = 'upper right')
plt.show()

Если я вручную добавлю xticks, чтобы отобразить человека, предполагаемый вывод:

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете использовать pivot_table

df.assign(A=df.A.astype(int)).pivot_table(index="C", columns="B", values="A",aggfunc='count').rename_axis(None).rename_axis(None,1).plot(kind='bar')

enter image description here

0 голосов
/ 29 июня 2018

Ваши данные в кадре данных и на графике не совпадают, например, у Джона совпадающие строки

>>> df[df.C == "John"]
   A  B     C
0  1  A  John
3  2  A  John
5  2  C  John
7  3  A  John
>>>    

Установка фрейма данных в соответствии с графиком.

>>> d = ({
...     "A" : [3,1,2,2,1,1],
...     "B" : ["A", "C", "B", "C", "B", "D",],
...     "C" : ["John", "John", "Carl", "Carl", "Lily", "Lily"]
... })
>>>
>>> df = pd.DataFrame(data=d)

Используйте pivot для изменения формы столбца и графика.

>>> df.pivot(index="C", columns="B", values="A").plot(kind="bar")
...