如何有效地更改数据框中的值

时间:2015-07-15 02:47:07

标签: python pandas

# Incorporate delisting return
i = 0
for tc, col in dlret.iloc[:,0:50].iteritems():
    idx = col.index[col.notnull()]
    if len(idx) != 0:
        tr = idx[0]
        val = col.ix[tr]
        #ret.ix[tr, tc] = val #this line is too slow
    i += 1
    if math.floor(i/10) > math.floor((i-1)/10):
        print i

dlret DataFrame有600行左右和25000+列。我遍历列以查找第一个非空值(退市返回),然后在ret DataFrame中找到相应的位置,将值设置为退市返回的值。但是,使用ix索引相应位置时,代码运行速度很慢。关于如何有效实现这一目标的任何建议?

1 个答案:

答案 0 :(得分:1)

根据您的评论,您想要的是遍历列以查找每列的第一个非空值并更新ret DataFrame。 您可以使用以下代码执行此操作:

mask_first_nonnull = dlret.notnull() & (dlret.notnull().cumsum()==1)
ret[mask_first_nonnull]=dlret[mask_first_nonnull]