Pandas dataframe groupby plot

Ik heb een dataframe dat is gestructureerd als:

         Date   ticker  adj_close 
0   2016-11-21     AAPL    111.730     
1   2016-11-22     AAPL    111.800    
2   2016-11-23     AAPL    111.230    
3   2016-11-25     AAPL    111.790     
4   2016-11-28     AAPL    111.570    
...          
8   2016-11-21      ACN    119.680            
9   2016-11-22      ACN    119.480              
10  2016-11-23      ACN    119.820              
11  2016-11-25      ACN    120.740 
...             

Hoe kan ik op basis van de ticker de adj_closeversus Dateplotten?


Antwoord 1, autoriteit 100%

Eenvoudig plot,

u kunt gebruiken:

df.plot(x='Date',y='adj_close')

Of u kunt de index vooraf instellen op Date, dan kunt u eenvoudig de gewenste kolom plotten:

df.set_index('Date', inplace=True)
df['adj_close'].plot()

Als je een grafiek wilt met één reeks per tickererop

Je moet groupbydoen voordat:

df.set_index('Date', inplace=True)
df.groupby('ticker')['adj_close'].plot(legend=True)


Als je een grafiek wilt met individuele subplots:

grouped = df.groupby('ticker')
ncols=2
nrows = int(np.ceil(grouped.ngroups/ncols))
fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(12,4), sharey=True)
for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
    grouped.get_group(key).plot(ax=ax)
ax.legend()
plt.show()


Antwoord 2, autoriteit 15%

Vergelijkbaar met het antwoord van Julien hierboven, had ik succes met het volgende:

fig, ax = plt.subplots(figsize=(10,4))
for key, grp in df.groupby(['ticker']):
    ax.plot(grp['Date'], grp['adj_close'], label=key)
ax.legend()
plt.show()

Deze oplossing is wellicht relevanter als u meer controle wilt over matlab.

Oplossing geïnspireerd door: https://stackoverflow.com/a/52526454/10521959

Other episodes