用于数据帧中多列操作的矢量化解决方案

时间:2019-06-18 13:07:30

标签: python pandas dataframe optimization vectorization

我可能会有一个较大的数据框,该数据框具有以下第一行:

   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']

你知道怎么做吗?

2 个答案:

答案 0 :(得分:5)

DataFrame.subDataFrame.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