我可能会有一个较大的数据框,该数据框具有以下第一行:
BUCHDAT y y1 y2 y3 y4 y5 y6 y7
7 2017-02-26 577 30.0 622.0 1785.0 2633.0 422.0 10497.0 364.0
现在我想用公式替换“ y”至“ y7”列:
df['y'] = df['y'] - df['y1']
是否有矢量化解决方案?所以我想在每列中应用此公式,对于下一列,公式应为:
df['y1'] = df['y1']- df['y2']
你知道怎么做吗?
答案 0 :(得分:5)
将DataFrame.sub
与DataFrame.shift
一起使用:
df1 = df.iloc[:, 1:].astype(float)
df.iloc[:, 1:] = df1.sub(df1.shift(-1, axis=1))
print (df)
BUCHDAT y y1 y2 y3 y4 y5 y6 y7
7 2017-02-26 547.0 -592.0 -1163.0 -848.0 2211.0 -10075.0 10133.0 NaN
答案 1 :(得分:5)
以下是使用基础numpy数组以取得良好性能的一种方法:
df.iloc[:,1:-1] = df.values[:,1:-1] - df.values[:,2:]
print(df)
BUCHDAT y y1 y2 y3 y4 y5 y6 y7
7 2017-02-26 547.0 -592.0 -1163.0 -848.0 2211.0 -10075.0 10133.0 364.0