首页 > 解决方案 > 改进此循环以使其更可python化的方法

问题描述

我需要在列和行之间进行操作。我在“for”循环中开发了一些代码库。我知道使用数据框操作(熊猫)可以表现得更好,我尝试了不同的方法,但没有奏效。也许你可以帮助我。

for i in range(1, len(df)):
    if i == 1:
        df['A'][i] = df['D'][i]
    elif df['B'][i] == 1:
        df['A'][i] = df['A'].shift()[i] + df['C'][i]
    elif df['B'][i] == 0:
        df['A'][i] = df['A'].shift()[i]

资源:

Date        B   D    X  C   A   
2004-03-03  0.0 1122 59 0.0 0.0 
2004-03-03  0.0 1151 59 0.0 0.0
2004-03-04  0.0 1154 68 0.0 0.0 
2004-03-05  0.0 1156 72 0.0 0.0 
2004-03-08  0.0 1147 38 0.0 0.0 
2004-03-09  0.0 1140 27 0.0 0.0 
2004-03-10  0.0 1123 13 0.0 0.0 
2004-03-11  0.0 1106 8  0.0 0.0 
2004-03-12  1.0 1120 36 14  0.0 
2004-03-15  1.0 1104 24 -16 0.0 
2004-03-16  1.0 1110 35 6   0.0 
2004-03-17  1.0 1123 53 13  0.0

结果:

Date        B   D    X  C   A   
2004-03-02  0.0 1122 59 0.0 1122    
2004-03-03  0.0 1151 59 0.0 1122    
2004-03-04  0.0 1154 68 0.0 1122    
2004-03-05  0.0 1156 72 0.0 1122    
2004-03-08  0.0 1147 38 0.0 1122    
2004-03-09  0.0 1140 27 0.0 1122    
2004-03-10  0.0 1123 13 0.0 1122    
2004-03-11  0.0 1106 8  0.0 1122    
2004-03-12  1.0 1120 36 14  1135    
2004-03-15  1.0 1104 24 -16 1118    
2004-03-16  1.0 1110 35 6   1124    
2004-03-17  1.0 1123 53 13  1137

标签: pythonpython-3.5

解决方案


你可以做类似的事情

df[A] = (df['A'] == 1) * (df['A'].shift() + df['C']) + df['A'].shift()[i] + (df['A'] == 0)
df['A'][0] = df['D'][1]

它不会使用循环,但我认为它会更快。我替换i = 1i = 0因为 pandas 数据帧中的索引从 0 而不是 1


推荐阅读