通过迭代将列添加到 MultiIndex 数据框
Adding columns to MultiIndex dataframe via iteration
我有一个多索引问题。我使用第 3 方包,以 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))
输出类似于以下内容:
我尝试使用下面的代码临时执行此操作,但不断收到大量的键盘错误和 'slice' 错误...
df['GOOGL US Equity']['1 STD DEV'] = df['GOOGL US Equity']['BEST_PE_RATIO'].std()
是否有更 pythonic 的解决方案来创建新的所需列并遍历代码?
通过链式索引为数据帧设置值时,有时会失败并且结果难以预测。看这个: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)
。
我有一个多索引问题。我使用第 3 方包,以 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))
输出类似于以下内容:
我尝试使用下面的代码临时执行此操作,但不断收到大量的键盘错误和 'slice' 错误...
df['GOOGL US Equity']['1 STD DEV'] = df['GOOGL US Equity']['BEST_PE_RATIO'].std()
是否有更 pythonic 的解决方案来创建新的所需列并遍历代码?
通过链式索引为数据帧设置值时,有时会失败并且结果难以预测。看这个: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)
。