数据框中多列操作的矢量化解决方案
Vectorized solution for multiple column operation in a dataframe
我可能会有一个大数据框,其中第一行如下:
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']
你知道怎么做吗?
使用DataFrame.sub
with 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
这是一个使用底层 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
我可能会有一个大数据框,其中第一行如下:
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']
你知道怎么做吗?
使用DataFrame.sub
with 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
这是一个使用底层 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