2017-09-03 13 views
0

私は株価がDataframeを持っています。以下の例が、これは私は問題は、この唯一のループで最後の項目を示した(ある従っpandasのiteritemsループ内のすべての列を取得

>>>for stockname, stock in df.iteritems():  
# Create 10,30,50,100 and 200D MAvgs        
MA10D = stock.rolling(10).mean() 
MA30D = stock.rolling(30).mean() 
MA50D = stock.rolling(50).mean() 
MA100D = stock.rolling(100).mean() 
MA200D = stock.rolling(200).mean() 
df_stockname = pd.concat([df[[1]],MA10D,MA30D,MA50D,MA100D,MA200D],axis=1) 

でiteritemsを使用して移動平均を作成している株価の4500行

>> 
DATE  MMM  US Equity AIR  US Equity 
1/3/2000 47.19    17.56 
1/4/2000 45.31    17.63 
1/5/2000 46.63    17.81 
1/6/2000 50.38    17.94 

のために行きますエア米国株式)。ループの最初の株式(すなわち、dfの最初の株式であるMMM米国株式)については、どのようにMA10D、MA30Dなどにアクセスしますか。これを行うにはどうすればいいですか

私は最終的に株価MA10D、MA30D、MA50D、MA100D、MA200Dの在庫ごとに1つずつ、2つのデータフレームを作成したいと考えています。だから私は究極的に各データフレームに名前を付け、連結内のdf [[#]]を変更する方法が必要です。

+0

なぜあなたは、このためのiteritemsが必要なのでしょうか?ローリング平均を直接適用することができます。 –

+0

私はstackoverflowで提供された別の答えを使用しました。あなたがより良い方法を持っているなら、それを適用して幸せ。もともと、私のデータフレームは非常に大きく(10,000列)、レスポンダーはこの方法ではメモリの使用量が少ないと言われていたので、人はこれを推奨しました。私はどのように個別のアイテムを取得するために私は個々の株式のすべての情報をグループ化することができますので、iteritemsループ内の個々の株価を取得する必要がありますを見つけるしようとしています –

答えて

0

これはあなたがやろうとしていることですか?ここで

results = {} 

# Create 10,30,50,100 and 200D MAvgs        
for stockname, stock in df.iteritems(): 
    df_copy = pd.DataFrame(stock) 
    df_copy[stockname + '_MA10D'] = stock.rolling(10).mean() 
    df_copy[stockname + '_MA30D'] = stock.rolling(30).mean() 
    df_copy[stockname + '_MA50D'] = stock.rolling(50).mean() 
    df_copy[stockname + '_MA100D'] = stock.rolling(100).mean() 
    df_copy[stockname + '_MA200D'] = stock.rolling(200).mean() 
    results[stockname] = df_copy 

は、実行する必要があり、完全なバージョンであり、結果:

data = { 
    'MMM': (47.19, 45.31, 46.63, 50.38), 
    'AIR': (17.56, 17.63, 17.81, 17.94) 
} 
index = pd.Index(pd.date_range("01/03/2000", "01/06/2000"), name='DATE') 
df = pd.DataFrame(data=data, index=index) 

results = {} 

# Create 10,30,50,100 and 200D MAvgs        
for stockname, stock in df.iteritems(): 
    df_copy = pd.DataFrame(stock) 
    df_copy[stockname + '_MA10D'] = stock.rolling(10).mean() 
    df_copy[stockname + '_MA30D'] = stock.rolling(30).mean() 
    df_copy[stockname + '_MA50D'] = stock.rolling(50).mean() 
    df_copy[stockname + '_MA100D'] = stock.rolling(100).mean() 
    df_copy[stockname + '_MA200D'] = stock.rolling(200).mean() 
    results[stockname] = df_copy 

print(results['MMM']) 
print(results['AIR']) 

出力:

   MMM MMM_MA10D MMM_MA30D MMM_MA50D MMM_MA100D MMM_MA200D 
DATE                  
2000-01-03 47.19  NaN  NaN  NaN   NaN   NaN 
2000-01-04 45.31  NaN  NaN  NaN   NaN   NaN 
2000-01-05 46.63  NaN  NaN  NaN   NaN   NaN 
2000-01-06 50.38  NaN  NaN  NaN   NaN   NaN 
       AIR AIR_MA10D AIR_MA30D AIR_MA50D AIR_MA100D AIR_MA200D 
DATE                  
2000-01-03 17.56  NaN  NaN  NaN   NaN   NaN 
2000-01-04 17.63  NaN  NaN  NaN   NaN   NaN 
2000-01-05 17.81  NaN  NaN  NaN   NaN   NaN 
2000-01-06 17.94  NaN  NaN  NaN   NaN   NaN 
+0

これはクリックするたびにコンピュータ(spyder3エディタ)結果はdictです。どのように私は最初のデータフレームをdictから取り出すのですか –

+0

結果はPython辞書です。 2つのDataFramesを含む必要があります。最初のものを次のように取得します: 'results ['MMM']' – Bill

関連する問題