我有一个MultiIndex问题。我使用第三方软件包,以MultiIndex格式提供股票价格和市盈率。我试图做的是为每个股票代码迭代添加两个新列,计算PE比率的平均值和标准值。
可以使用以下代码复制粗略数据结构:
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['GOOGL US Equity']['1 STD DEV'] = df['GOOGL US Equity']['BEST_PE_RATIO'].std()
是否有更多的pythonic解决方案可以创建新的所需列并通过代码进行迭代?
答案 0 :(得分:0)
通过链式索引将值设置为dataframe时,有时会失败并且结果很难预测。见: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)
。