我有一个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
答案 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