2017-09-24 7 views
0

アルゴリズムを構築するには、Pythonのスクリプトを何度も何度も使用する必要がないような方法でPythonスクリプトを作成したいと考えています。DataFrameのサブセットを作成する

以下は私が使用しているコードです。最初usesymbolsを使用して

start_date = '2016-06-01' 
end_date = '2017-09-22' 

#Pool of symbols that I want to use 
usesymbols = ['GLAXO', 'AVN'] 

#Function to build a dataframe 
def data(symbols): 
    dates=pd.date_range(start_date,end_date) 
    df=pd.DataFrame(index=dates) 
    for symbol in symbols: 
     df_temp=pd.read_csv('/home/furqan/Desktop/python_data/{}.csv'.format(str(symbol)),usecols=['Date','Close'], 
          parse_dates=True,index_col='Date',na_values=['nan']) 
     df_temp = df_temp.rename(columns={'Close': symbol}) 
     df=df.join(df_temp) 
     df=df.fillna(method='ffill') 
     df=df.fillna(method='bfill') 
    return df 

#Function to build powerset from list of "usesymbols" 
def powerset(iterable): 
    s = list(iterable) 
    return chain.from_iterable(combinations(s, r) for r in range(1, len(s)+1)) 

power_set = list(powerset(usesymbols)) 
dataframe = data(usesymbols) 
print(dataframe) 
for j in range(0, len(power_set)): 

私は次のようにのように見える電力設定をgernerated:

[('GLAXO',), ('AVN',), ('GLAXO', 'AVN')] 

は、私は次のようにのように見えるデータフレーム作成:その後

   GLAXO AVN 
2016-06-01 205.93 31.42 
2016-06-02 206.22 32.62 
2016-06-03 207.86 31.65 
2016-06-04 207.86 31.65 
2016-06-05 207.86 31.65 

を私が追加そのループの下で、一時的なデータフレームを作成して、一時的なデータフレームが1つの列、つまりGLAXOで構成されているj = 0の場合、j = 1のときには、 AVN 'であり、最終的にj = 3のときには' AVN 'と' GLAXO 'の両方の列を含むべきである。

私はその一時的なデータフレームを作成するのが難しいです。 2番目の選択肢は、データ関数を使用することですが、それは毎回pandas read_csv関数を使用することになります。

答えて

1
powerset = [('GLAXO'), ('AVN'), ('GLAXO', 'AVN')] 
j = 1 
print(df.loc[:,powerset[j]]) 

2016-06-01 31.42 
2016-06-02 32.62 
2016-06-03 31.65 
2016-06-04 31.65 
2016-06-05 31.65 
Name: AVN, dtype: float64 

j=2 
print(df.loc[:,powerset[j]]) 

GLAXO AVN 
2016-06-01 205.93 31.42 
2016-06-02 206.22 32.62 
2016-06-03 207.86 31.65 
2016-06-04 207.86 31.65 
2016-06-05 207.86 31.65 
+0

完璧なソリューションです。 –

関連する問題