没有循环的熊猫分配?

时间:2014-02-14 01:40:09

标签: python pandas

我有:

  • NewData ,一个从
  • 填充的pd.DataFrame
  • SourceData ,包含源数据和
  • 的数据框列表
  • source ,一个数据框,保存索引值,为其分配SourceData中的数据帧。
  • indexlen ,数据框中索引长度的整数

(使用数据帧,因为索引对齐至关重要。)

例如,假设SourceData中有1000个df,而indexlen是10,000。在10,000,我将分配从SourceData到NewData的所有列,向上移动索引(因为所有df共享相同的索引),直到源减少,此时我将开始从SourceData中的数据框中的所有列分配值[ 999]到NewData等。

我目前正在使用循环执行此操作:

for j in range(1, indexlen + 1):
    NewData[j] = SourceData[source[j]].ix[j,:]

我想在不使用循环的情况下这样做,但我不知道如何广播这个。我确定我错过了一些明显的东西,但任何帮助都会受到赞赏。谢谢!

编辑: 我将源代码列为一个列表,因为我认为元素访问更有效。

在回答有关数据框的问题时,它们是标准价格数据:

>>>SourceData[1].head()

bpz1975     Open    High    Low     Close   Vol     OI
1975-02-13  2.275   2.275   2.275   2.275   0   50
1975-02-14  2.275   2.275   2.275   2.275   0   50
1975-02-18  2.275   2.275   2.275   2.275   0   50
1975-02-19  2.290   2.290   2.290   2.290   0   50
1975-02-20  2.290   2.290   2.290   2.290   0   50

在这种情况下,阅读期货合约的所有月份,然后应用滚动逻辑来创建一个系列。

1 个答案:

答案 0 :(得分:1)

创建DataFrame并填充它通常不是最快或最常用的方式。

在这种情况下,您似乎可以执行concat

pd.concat(SourceData)

如果你需要在SourceData的DataFrames中包含索引信息,那么我会在执行concat之前执行

目前还不清楚这究竟是什么,但听起来你建议根据源设置每个帧的索引...你可以创建一个传递SourceData的函数来改变每个的索引使用来自源代码的DataFrame(没有看到来源,不清楚到底是怎么回事)。