提问人:harryjulian 提问时间:7/26/2023 最后编辑:harryjulian 更新时间:7/26/2023 访问量:39
计算新行特征时更新 pandas 数据帧的惯用方法
Idiomatic way to update pandas dataframe when computing features for new row
问:
我有一个 pandas 数据帧,其中包含时间序列数据行。
我想定义一个函数,可用于在机器学习模型的现有时间序列数据帧(5 列)上计算某些特征(20+ 列)。compute_features(*args **kwargs)
在实时应用程序中使用该模型时,我将收到新的数据行(5 列)——我必须计算这些数据的特征——然后添加到数据帧中。小问题是其中一些功能是滚动的,并且在某些列中需要过去的 N 个值。
因此,我想使用该函数来建立我所有的特征工程逻辑,并且在更改标志时(假设)我可以传递一个预先存在的特征数据帧和一行新的数据,我们将 i) 计算特征和 ii) 附加该行。compute_features
update=True
我可以想到“快速而肮脏”的方法来解决这个问题,但我想知道是否可能有一种更惯用的、pythonic 的和不那么复杂的方法来解决这个问题。
编辑:
例如:
import pandas as pd
path = ...
df = pd.read_csv(path)
def _compute_features_inner(df, new_row = None):
# contains logic for computing features
# here if there's a new row, we want to use the existing df and
# only run transforms on the final row
df['feature_1'] = df['a'].rolling(window = 10)
df['feature_2'] = df['a'].rolling(window = 20)
...
def compute_features(df, new_row: Optional[pd.DataFrame] = None) -> pd.DataFrame:
if new_row is None:
df = _compute_features_inner(df)
else:
df = _compute_features_inner(df, new_row)
return df
然后在实时环境中,我们可能每 15 分钟获得一个新行(因此我们不介意在这种情况下简单地附加到 DataFrame)。我只想对最后一行运行转换,但您不能直接附加 因为它没有必要的列。compute_features
new_row
答: 暂无答案
评论