Pandas:如何对列值上拆分的子数据帧应用操作



我有维护数据(来自csv文件或其他来源(,数据格式如下:

Date        Equipment_id    sensor_reading  failure
2017-01-01  eq_1                 1.0        0
2017-01-03  eq_1                 0.5        0
2017-01-04  eq_1                 1.5        1
2017-01-01  eq_2                 Nan        Nan
2017-01-02  eq_2                 0.3        0
2017-01-03  eq_2                 1.0        0           

我想在这些数据上应用像插值或滚动窗口这样的变换,我可以用panda来做到这一点。但是,例如,如果我使用df.interpole((,即使数据来自不同的equipment_id,它也会进行插值。可能有一些方法可以避免这种情况,但这似乎很复杂,我可能会错过错误。

我考虑使用for循环来分割数据帧,如下所示:

data_dict = {}
for equipment_id in df[Equipment_id].unique():
data_dict[equipment_id] = df.loc[df['Equipment_id']==equipment_id]

然后在将每个子数据帧转换为numpy数组并将它们连接起来以形成我的训练集之前,对每个子数据框使用df.interpolate((或df.rolling(window_size(.min((等操作。

但我真的不知道幕后是否发生了什么。所以我想知道,让这些子数据帧单独工作是否会导致内存问题或进行更长的计算。我也不知道是否有更干净或更规范的方法来做到这一点。

如果我理解正确,您希望在每个id上单独应用滚动窗口/函数。在这种情况下,groupby((和apply((会有所帮助。

例如,这将为每个id应用一个滚动窗口,该窗口计算3行窗口的总和:

df.groupby(equipment_id).rolling(3).sum()

如果你想插值(注意你不需要传入一个参数(:

df.groupby(equipment_id).apply(pd.interpolate)

你也可以混合这些:

df.groupby(equipment_id).rolling(3).apply(pd.interpolate)

最新更新