2016-07-27 78 views
3

我有我從一個更大的數據幀,它列出了最糟糕的10「基準歸來」及其相應的投資組合的回報和日期獲得以下數據框:熊貓據幀到Seaborn分組BARCHART

enter image description here

我已經設法創建一個Seaborn條形圖,其中列出了基準收益和其相應的日期與此腳本:

import pandas as pd 
import seaborn as sns 

df = pd.read_csv('L:\\My Documents\\Desktop\\Data NEW.csv', parse_dates = True) 

df = df.nsmallest(10, columns = 'Benchmark Returns') 
df = df[['Date', 'Benchmark Returns', 'Portfolio Returns']] 
p6 = sns.barplot(x = 'Date', y = 'Benchmark Returns', data = df) 
p6.set(ylabel = 'Return (%)') 
for x_ticks in p6.get_xticklabels(): 
    x_ticks.set_rotation(90) 

而且它會產生這樣的情節:

enter image description here

不過,我想是同時包含基準收益率和投資組合回報率,其中兩種不同的顏色,使用這兩個類別來區分分組的柱狀圖。

我試過幾種不同的方法,但似乎沒有任何工作。

在此先感謝您的幫助!

回答

5

請看看這是你想看到的。

訣竅是從廣角變換大熊貓df到長格式

步驟1:準備數據

import seaborn as sns 

np.random.seed(123) 
index = np.random.randint(1,100,10) 

x1 = pd.date_range('2000-01-01','2015-01-01').map(lambda t: t.strftime('%Y-%m-%d')) 
dts = np.random.choice(x1,10) 

benchmark = np.random.randn(10) 
portfolio = np.random.randn(10) 

df = pd.DataFrame({'Index': index, 
        'Dates': dts, 
        'Benchmark': benchmark, 
        'Portfolio': portfolio}, 
        columns = ['Index','Dates','Benchmark','Portfolio']) 

步驟2:從 「寬」 到 「長」 格式

df1 = pd.melt(df, id_vars=['Index','Dates']).sort_values(['variable','value']) 
df1 

    Index Dates variable value 
9 48 2012-06-13 Benchmark -1.410301 
1 93 2002-07-31 Benchmark -1.301489 
8 97 2005-01-21 Benchmark -1.100985 
0 67 2011-06-01 Benchmark 0.126526 
4 84 2003-09-25 Benchmark 0.465645 
3 18 2009-07-13 Benchmark 0.522742 
5 58 2007-12-04 Benchmark 0.724915 
7 98 2002-12-28 Benchmark 0.746581 
6 87 2009-02-07 Benchmark 1.495827 
2 99 2000-04-21 Benchmark 2.207427 
16 87 2009-02-07 Portfolio -2.750224 
14 84 2003-09-25 Portfolio -1.855637 
15 58 2007-12-04 Portfolio -1.779455 
19 48 2012-06-13 Portfolio -1.774134 
11 93 2002-07-31 Portfolio -0.984868 
12 99 2000-04-21 Portfolio -0.748569 
10 67 2011-06-01 Portfolio -0.747651 
18 97 2005-01-21 Portfolio -0.695981 
17 98 2002-12-28 Portfolio -0.234158 
13 18 2009-07-13 Portfolio 0.240367 

步驟3:繪製

sns.barplot(x='Dates', y='value', hue='variable', data=df1) 
plt.xticks(rotation=90) 
plt.ylabel('Returns') 
plt.title('Portfolio vs Benchmark Returns'); 

enter image description here

+0

謝謝!這工作完美。 –

+0

您是否有機會知道如何將Seaborn地塊出口到現有的Bokeh文件? –

+0

沒有經驗與散景,對不起。 –