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

PV8*_*PV8 1 python optimization vectorization dataframe pandas

我可能会有一个较大的数据框,其中包含以下第一行:

   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 
Run Code Online (Sandbox Code Playgroud)

现在我想用公式替换“ y”至“ y7”列:

df['y'] = df['y'] - df['y1']

是否有矢量化解决方案?因此,我想将此公式应用于每一列,对于下一列,公式应为:

df['y1'] = df['y1']- df['y2']

你有什么想法吗?

jez*_*ael 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
Run Code Online (Sandbox Code Playgroud)


yat*_*atu 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
Run Code Online (Sandbox Code Playgroud)

  • 我通常会添加一些解释。我确实认为不必学习非常基础的知识,除非 OP 水平明显很低。我认为我不应该添加切片符号的工作原理。你不这么认为吗@erfan? (2认同)