2017-04-24 91 views
0

我有一個MultiIndex問題。我使用第三方軟件包,以MultiIndex格式傳遞我的股票價格和市盈率。我想要做的是迭代地爲每個代碼行添加兩個新列,它們計算PE比值的平均值和標準值。通過迭代將列添加到MultiIndex數據框中

粗糙的數據結構可以用這個代碼被複制:

arrays = [['GOOGL US Equity','GOOGL US Equity','IBM US Equity','IBM US Equity'],['LAST_PRICE','BEST_PE_RATIO']*2] 
columns = pd.MultiIndex.from_arrays(arrays, names=['ticker','field']) 

df = pd.DataFrame(np.random.randn(4,4), 
        columns=columns, 
        index=pd.date_range('20160103',periods=4)) 

輸出類似以下內容:

df

我已經嘗試做這個特設用下面的代碼,但不斷有越來越多的核子和「切片」錯誤...

df['GOOGL US Equity']['1 STD DEV'] = df['GOOGL US Equity']['BEST_PE_RATIO'].std() 

是否有更多pythonic解決方案可以創建新的所需列並迭代代碼?

+1

顯示更多關於的資料的代碼 – Edward

回答

0

當通過鏈接索引將值設置爲數據框時,有時會失敗並且結果很難預測。看到這個:Returning a view versus a copy in Pandas。我認爲df[('GOOGL US Equity','1 STD DEV')] = df['GOOGL US Equity']['BEST_PE_RATIO'].std()是解決方案。

如果你有很多代號,然後像這樣做:

for ticker in df.columns.levels[0]: 
    df[(ticker, '1 STD DEV')] = df[ticker]['BEST_PE_RATIO'].std() 

此外,如果你希望訴諸列,使用df.sort_index(axis=1)