改进此循环以使其更可Python化的方法

时间:2019-07-05 12:28:20

标签: python python-3.5

我需要在列和行之间进行操作。我在“ for”循环中开发了一些代码库。我知道使用数据框操作(panda)可能会更好,我尝试了其他方法,但是没有用。也许你可以帮我。

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

1 个答案:

答案 0 :(得分:0)

您可以做类似

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

它不会使用循环,但是我认为它会更快。我将i = 1替换为i = 0,因为在熊猫数据框中建立索引是从0开始而不是1