2016-05-04 10 views
0

Plot drei Zeilen - eine Zeile, pro Symbol pro TagPlot drei Zeilen - eine Zeile, pro Symbol pro Tag

import pandas as pd 
import matplotlib.pyplot as plt 

      symbol price interest 
Date 

2016-04-22 AAPL 445.50  0.00 
2016-04-22 GOOG 367.02  21.52 
2016-04-22 MSFT 248.94  3.44 

2016-04-15 AAPL 425.51  0.00 
2016-04-15 GOOG 338.57  13.06 
2016-04-15 MSFT 226.66  1.15 

Derzeit aufgeteilt ich den Datenrahmen in drei verschiedene Rahmen:

df1 = df[df.symbol == 'AAPL'] 
df2 = df[df.symbol == 'GOOG'] 
df3 = df[df.symbol == 'MSFT'] 

ich sie dann plotten:

plt.plot(df1.index, df1.price.values, 
     df2.index, df2.price.values, 
     df3.index, df3.price.values) 

Ist es möglich, diese drei Symbole Preise direkt aus dem Datenrahmen zu plotten?

Antwort

0

versuchen Sie dies:

ax = df[df.symbol=='AAPL'].plot() 

df[df.symbol=='GOOG'].plot(ax=ax) 

df[df.symbol=='MSFT'].plot(ax=ax) 

plt.show() 
0
# Create sample data. 
np.random.seed(0) 
df = pd.DataFrame(np.random.randn(100, 3), columns=list('ABC'), index=pd.date_range('2016-1-1', periods=100)).cumsum().reset_index().rename(columns={'index': 'date'}) 
df = pd.melt(df, id_vars='date', value_vars=['A', 'B', 'C'], value_name='price', var_name='symbol') 
df['interest'] = 100 
>>> df.head() 
     date symbol  price interest 
0 2016-01-01  A 1.764052  100 
1 2016-01-02  A 4.004946  100 
2 2016-01-03  A 4.955034  100 
3 2016-01-04  A 5.365632  100 
4 2016-01-05  A 6.126670  100 

# Generate plot. 
plot_df = (df.loc[df.symbol.isin(['A', 'B', 'C']), ['date', 'symbol', 'price']] 
      .set_index(['symbol', 'date']) 
      .unstack('symbol')) 
plot_df.columns = plot_df.columns.droplevel() 
>>> plot_df.plot()) 

enter image description here

+0

Ihre Antwort die Spalte übernehmen 'Symbol' hat seine Werte in Spaltennamen umgewandelt [ 'A', 'B', 'C']. Gibt es eine Pandas-Methode? – user5404669

Verwandte Themen