python - 获取数据框中每一列的差异并在完成后重新排序的最有效方法
问题描述
嗨,我有一个数据框,其中有几列。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 必须诉诸整个数据框。
解决方案
希望这适用于您的数据,但我认为这是正确的大方向。当然,我们将丢失 右侧各列的第一行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:])
推荐阅读
- puppeteer - 运行脚本时抛出找不到模块“dotenv”
- oracle - 如果我们使用 colsep,sql plus 输出不会以正确的 CSV 格式出现,
- android - MPAndroidChart如何在kotlin中显示带有标签底部的条形颜色
- angular - 为单元测试注入自定义管道
- python - TypeError: forward() 接受 2 个位置参数,但给出了 3 个,ERROR Mask R CNN
- buffer - Direct3D 12 中的 W-Buffer(ing)
- html - Angular:在routerLink中创建一个routerLink
- javascript - Loop the http request to the page until status code is 200 and then redirect to that page
- javascript - 在 forEach 中获取数组对象
- flask - 试图在烧瓶/jinja2 中标记安全