2017-06-25 9 views
4

私は現在、毎日の米国財務省レートからなるデータフレームを構築しようとしています。ご覧のように、pandasは自動的に列の書式を整えて整列させていますが、これはわかりません。ここに私のコードのいくつかがあります。私が抱えている問題を明らかにするためには、小さな例が必要でした。私が言ったように、すべての料金matplotlib米国債利回り曲線

Yield_Curve = pd.DataFrame({'1m': One_Month['Value'], '3m': Three_Month['Value'], '1yr': One_Year['Value']}) 
Yield_Curve.loc['2017-06-22'].plot() 
plt.show() 

enter image description here

Yield_Curve.tail() 


      1m  1yr  3m 
Date    
2017-06-16 0.85 1.21 1.03 
2017-06-19 0.85 1.22 1.02 
2017-06-20 0.88 1.22 1.01 
2017-06-21 0.85 1.22 0.99 
2017-06-22 0.80 1.22 0.96 

に対して繰り返さ

import quandl 
import matplotlib.pyplot as plt 

One_Month = quandl.get('FRED/DGS1MO') 

^^、私は唯一の3年間、データフレームが、明らかに2年に3つのレートを加え、 5年のレートでも問題が発生します。

は、私はいくつかの検索を行なったし、この記事を見た: はPlotting Treasury Yield Curve, how to overlay two yield curves using matplotlib

最後のポストは明らかに作品のコードを使用している間、私はむしろ私の現在のデータセットを維持することができると思いますが(One_Month、Three_Month ....)他の分析にも使用しているので、これを行うには

質問:カラムオーダーをロックする方法はありますか?

ありがとうございました!

答えて

2

を使用すると、1つのリストとしてのシンボルを指定することができます。また、@Andrew Lが提案したようにreindex_axisを使用するだけでなく、次の最終行を参照して、列の順序を指定する順序付き列のリストを渡すこともできます。

from pandas_datareader.data import DataReader as dr 
syms = ['DGS10', 'DGS5', 'DGS2', 'DGS1MO', 'DGS3MO'] 
yc = dr(syms, 'fred') # could specify start date with start param here 
names = dict(zip(syms, ['10yr', '5yr', '2yr', '1m', '3m'])) 
yc = yc.rename(columns=names) 
yc = yc[['1m', '3m', '2yr', '5yr', '10yr']] 

print(yc) 
       1m 3m 2yr 5yr 10yr 
DATE          
2010-01-01 NaN NaN NaN NaN NaN 
2010-01-04 0.05 0.08 1.09 2.65 3.85 
2010-01-05 0.03 0.07 1.01 2.56 3.77 
2010-01-06 0.03 0.06 1.01 2.60 3.85 
2010-01-07 0.02 0.05 1.03 2.62 3.85 
     ... ... ... ... ... 
2017-06-16 0.85 1.03 1.32 1.75 2.16 
2017-06-19 0.85 1.02 1.36 1.80 2.19 
2017-06-20 0.88 1.01 1.36 1.77 2.16 
2017-06-21 0.85 0.99 1.36 1.78 2.16 
2017-06-22 0.80 0.96 1.34 1.76 2.15 

yc.loc['2016-06-01'].plot(label='Jun 1') 
yc.loc['2016-06-02'].plot(label='Jun 2') 
plt.legend(loc=0) 

enter image description here

2

表記法に沿ってソートされた列が必要であるにもかかわらず元の列の順序を変更したくない場合は、以下のように独自の列順序を作成する必要があります。あなたは、列の順序を定義するために探しているなら

fi_col = df.columns.str.extract('(\d)(\D+)', expand=True).sort_values([1, 0]).reset_index(drop=True) 
fi_col = fi_col[0] + fi_col[1] 

print(df[fi_col]) 

       1m 3m 1yr 
Date       
2017-06-16 0.85 1.03 1.21 
2017-06-19 0.85 1.02 1.22 
2017-06-20 0.88 1.01 1.22 
2017-06-21 0.85 0.99 1.22 
2017-06-22 0.80 0.96 1.22 
4

、あなたはreindex_axis()を使用することができます。pandas-datareader

df = df.reindex_axis(labels=['1m', '3m', '1yr'], axis=1) 

df 
       1m 3m 1yr 
Date       
2017-06-16 0.85 1.03 1.21 
2017-06-19 0.85 1.02 1.22 
2017-06-20 0.88 1.01 1.22 
2017-06-21 0.85 0.99 1.22 
2017-06-22 0.80 0.96 1.22