我有一个多列中的度量数据帧,这些列是聚合的.这意味着它们所代表的函数是单调递增的.现在,由于设备的重置,所有测量被重置为零,之后恢复聚合.但要处理数据,我需要放弃重置并移位所有列中的所有值,以模拟从未发生过重置.
因此,我认为这一状况:
变成
我想要的是一个函数,将所有列中的所有值移动到最后测量的最大值.
对于一些样本数据,我创建了以下内容:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
date_range = pd.date_range(start='2021-01-01', end='2021-01-05', freq='1D')
df1 = pd.DataFrame({'Date': date_range, 'Column 1': range(5), 'Column 2': range(5)})
date_range = pd.date_range(start='2021-01-06', end='2021-01-10', freq='1D')
df2 = pd.DataFrame({'Date': date_range, 'Column 1': range(5), 'Column 2': range(5)})
df = pd.concat([df1,df2])
which I want 变成
date_range = pd.date_range(start='2021-01-01', end='2021-01-10', freq='1D')
df3 = pd.DataFrame({'Date': date_range, 'Column 1': range(10), 'Column 2': range(10)})
我知道如何在我知道df是从df1和df2构造的情况下这样做
def shift_df(df, df1, df2):
columns = list(df.columns)
columns.remove('Date')
max_values = {}
for col in columns:
max_values[col] = df1[col].max()
min_values = {}
for col in columns:
min_values[col] = df2[col].min()
differences = {}
for col in columns:
differences[col] = max_values[col] - min_values[col]+1
for col in columns:
df[col] = np.where(df['Date'].isin(df2['Date']),
df[col] + differences[col],
df[col])
return df
但如果我只有DF的知识,我不知道如何概括它.基本上,我如何转换我的函数
shift_df(df, df1, df2)
至
shift_df(df)
任何帮助都将不胜感激.