首页 > 解决方案 > 获取数据框中每一列的差异并在完成后重新排序的最有效方法

问题描述

嗨,我有一个数据框,其中有几列。Timestamp我想创建一个新的数据框,或者用该列y_pred的差异替换此数据框中的列,但我希望最终结果保持相同的顺序。因此 CLES12Z 将被前一个 CLES12Z 行和当前 CLES12Z 行的差异替换,并且将对直到 y_pred 的每一列执行该差异。

到目前为止,我已经尝试了以下方法:

columnend = data.columns.get_loc('y_pred')

for e, col in enumerate(data.columns):
    if e < columnend and (e>0):
        print(col)
        data[col+'Diff'] = data[col]-data[col].shift(1)
        data.drop([col],axis=1,inplace=True)

但我注意到这只会将所有新列放在最后,然后 Id 必须诉诸整个数据框。

我想知道是否有更直接或更有效的方法来做到这一点? 在此处输入图像描述

标签: pythonpandasdataframe

解决方案


希望这适用于您的数据,但我认为这是正确的大方向。当然,我们将丢失 右侧各列的第一行y_pred,因为diff()将在那里创建Nan值。

col_end = df.columns.get_loc('y_pred')
col_list = df.columns.tolist()[:col_end]
df = df[col_list].diff().dropna().join(df.iloc[1:, col_end + 1:])
df.reset_index(drop=True, inplace=True)

编辑

如果您需要 Timestamp 列保持不变:

col_end = df.columns.get_loc('y_pred')
col_list = df.columns.tolist()[:col_end]
df = df[col_list].diff().join(df.loc[:, col_end + 1:])

推荐阅读