2016-01-16 3 views
0

У меня есть dataframe с некоторыми данными о машине - структура довольно проста. У меня есть идентификатор, год производства, километры, цена и тип топлива (бензин/дизель).Plotting pandas groupby

In [106]: 
stack.head() 

Out[106]: 
    year km  price fuel 
0 2003 165.286 2.350 petrol 
1 2005 195.678 3.350 diesel 
2 2002 125.262 2.450 petrol 
3 2002 161.000 1.999 petrol 
4 2002 164.851 2.599 diesel 

Я пытаюсь создать таблицу с pylab/Matplotlib, где ось й будет годом, а затем, используя GroupBy, чтобы иметь два участка (по одному для каждого типа топлива) со средними значениями по годам (в среднем функция) для цены и км.

Любая помощь будет оценена по достоинству.

ответ

1

Возможно, есть более прямой способ сделать это, но я бы сделал следующее. Во-первых GroupBy и принимать средства для цены:

meanprice = df.groupby(['year','fuel'])['price'].mean().reset_index() 

и для км:

meankm = df.groupby(['year','fuel'])['km'].mean().reset_index() 

Тогда я бы объединить два полученных dataframes, чтобы получить все данные в одном:

d = pd.merge(meanprice,meankm,on=['year','fuel']).set_index('year') 

Настройка индекс как year ley мы легко получаем вещи при заговоре с пандами. Полученный dataframe является:

 fuel price  km 
year       
2002 diesel 2.5990 164.851 
2002 petrol 2.2245 143.131 
2003 petrol 2.3500 165.286 
2005 diesel 3.3500 195.678 

в конце концов, вы можете построить фильтрацию по fuel:

d[d['fuel']=='diesel'].plot(kind='bar') 

d[d['fuel']=='petrol'].plot(kind='bar') 

получить что-то вроде:

enter image description here

enter image description here

Я не» t знать, является ли это который вы ожидали, но вы можете легко изменить их с помощью ключевого слова kind. Надеюсь, это поможет.

+0

Это все более или менее. Я хотел сделать два строчных сюжета - один за цену, а другой за километры, по две линии (дизель и бензин). – freethrow