【发布时间】:2018-10-25 15:46:53
【问题描述】:
在迭代的基础上,我正在生成一个如下所示的 DataFrame:
RIC RICRoot ISIN ExpirationDate Exchange ... OpenInterest BlockVolume TotalVolume2 SecurityDescription SecurityLongDescription
closingDate ...
2018-03-15 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
2018-03-16 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
2018-03-19 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
2018-03-20 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
2018-03-21 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
我把它变成了一个多索引的 DF:
tmp.columns = pd.MultiIndex.from_arrays( [ [contract]*len(tmp.columns), tmp.columns.tolist() ] )
其中contract 只是该数据的引用名称,您可以在下面的输出中看到SPH0:
SPH0 ...
RIC RICRoot ISIN ExpirationDate Exchange ... OpenInterest BlockVolume TotalVolume2 SecurityDescription SecurityLongDescription
closingDate ...
2018-03-15 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
2018-03-16 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
2018-03-19 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
2018-03-20 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
2018-03-21 SPH0 SP 2020-03-20 CME:Index and Options Market ... NaN None None SP500 IDX MAR0 None
我目前有一种非常低效的方式来合并这些 DataFrame:
if df is None:
df = tmp;
else:
df = df.merge( tmp, how='outer', left_index=True, right_index=True)
这非常慢。我想将所有这些 tempdf 与它们各自的合同名称一起存储在关联的映射样式中,并且能够以矢量化的方式轻松引用它们的数据。最佳解决方案是什么?水平/垂直增长重要吗?
【问题讨论】:
-
你为什么不直接使用
set_index()? -
何时合并?我不确定如何使用 set_index() 将 DataFrame 对象彼此附加。
-
请使用minimal reproducible example 发布完整的代码块,我们可以在空的 Python 环境中运行。最后一段是否在
for循环内运行? -
您能否在帖子中也包含您想要的输出?
标签: python pandas numpy dataframe