2014-02-14 56 views
0

我有:熊猫分配没有循环?

  • NewData,一个pd.DataFrame从
  • 填充SourceData,dataframes保持列表的源数据和
  • ,一个数据帧保持索引值SourceData中的数据帧将被分配。
  • indexlen,用于索引的在dataframes

长度的整数(使用dataframes因为它的关键索引对齐。)

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

我目前做这一个循环:

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

我想做到这一点,而无需使用一个循环,但我不知道如何播出这一点。我确定我错过了一些明显的东西,但任何帮助都会很感激。谢谢!

编辑: 我做了一个列表,因为我认为这是更有效的元素访问。

在回答有关dataframes问题,他们是标准的价格数据:

>>>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 

在这种情况下,在读一期货合约的所有月份,然后涂敷辊逻辑来创建一个系列。

+0

你有什么样的数据框? – TomAugspurger

+0

编辑了一个dfs头()的问题。而且,如果我不这样做,这些索引也可能会超过10,000。 (正如我想你可以告诉的那样,我的问题与这个具体问题一样多,关于良好的编程实践,所以欢迎任何批评。谢谢!) – user3241893

+0

我也试过用NewData作为列表。更快,更快。如果没有更好的方法来解决这个问题,我想这个解决方案是可以接受的。 – user3241893

回答

1

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

在这种情况下,它看起来像你可以做一个concat

pd.concat(SourceData) 

如果您需要包括源,索引信息,在SourceData的DataFrames内,然后我会做这个做之前CONCAT。

目前尚不清楚这究竟是什么,但它听起来像你建议设置基于源的每一帧的索引...你可以创建一个函数,通过SourceData更改每个DataFrame的索引与来自源(没有看到来源,不清楚究竟如何)。