Pandas Dataframe在算术距离

时间:2018-06-16 15:51:01

标签: pandas dataframe

我有一个pandas Dataframe,重量在列#a;'。我想改变重量只有当它们变化超过0.05(两个方向)时 并保存生成的列' a_1'。是否可以在不使用循环的情况下执行此操作?

date            a     a_1
2017-06-30     0.72   0.72  
2017-07-01     0.74   0.72    
2017-07-02     0.71   0.72
2017-07-03     0.70   0.72
2017-07-04     0.67   0.72
2017-07-05     0.66   0.66    --> difference is -0.06 < -0.05    
2017-07-06     0.65   0.66 
2017-07-07     0.76   0.76    --> difference is +0.10 > +0.05 
2017-07-08     0.77   0.76
2017-07-09     0.78   0.76
2017-07-10     0.74   0.76
2017-07-11     0.69   0.70    --> difference is -0.07 < -0.05
2017-07-12     0.73   0.70
2017-07-13     0.73   0.70

1 个答案:

答案 0 :(得分:0)

你可以使用熊猫&#39; apply方法,对你来说比for循环更可取吗?

不幸的是,这意味着要更改函数内的全局变量。如果你可以忍受,那么下面的工作:

number_to_compare = 0

def get_weight(row):
    global number_to_compare
    if abs(row.a - number_to_compare) > 0.05:
        number_to_compare = row.a
        return row.a
    return number_to_compare

df['a_1'] = df.apply(get_weight, axis=1)

输出:

               a    a_1
date        
2017-06-30  0.72    0.72
2017-07-01  0.74    0.72
2017-07-02  0.71    0.72
2017-07-03  0.70    0.72
2017-07-04  0.67    0.72
2017-07-05  0.66    0.66
2017-07-06  0.65    0.66
2017-07-07  0.76    0.76
2017-07-08  0.77    0.76
2017-07-09  0.78    0.76
2017-07-10  0.74    0.76
2017-07-11  0.69    0.69
2017-07-12  0.73    0.69
2017-07-13  0.73    0.69