cube timestamp temp
timestamp
2022-08-01 00:15:05.135 A1 2022-08-01 00:15:05.135 NaN
2022-08-01 00:15:37.255 A1 2022-08-01 00:15:37.255 23.17
2022-08-01 00:23:05.139 A1 2022-08-01 00:23:05.139 NaN
2022-08-01 00:23:15.137 A1 2022-08-01 00:23:15.137 NaN
2022-08-11 11:33:20.738 P19 2022-08-11 00:15:05.135 NaN
我正在尝试使用下面的代码根据相对于立方体的时间戳来插入温度中的 NaN 值
idata.set_index(idata['timestamp'],inplace = True)
idata['temp'] = idata.groupby('cube')['temp'].apply(lambda x:x.interpolate(method="time",limit_direction = "both"))
在执行此代码时,我收到错误“ValueError:无法在具有重复标签的轴上重新索引”。我无法删除重复的标签(时间戳),因为它可能属于 不同的立方体。请建议处理这种情况的替代方案。
您想要用作索引的列中可能有重复的值。索引值需要是唯一的。
您可以通过
df['timestamp'].duplicated()
找到它们
我认为问题源于首先设置重复索引,然后执行
groupby
。相反,我建议您先按 cube
分组,然后在每个组内进行插值:
def interp_group(g):
g.set_index('timestamp', inplace=True)
g['temp'] = g.temp.interpolate(method="time",limit_direction = "both")
return g
cubes = df.groupby('cube')
interpolated = groups.apply(f)
您将返回一个带有
MultiIndex
的数据帧,其中组为第一级,时间戳为第二级。 temp
列已根据您的需要进行插值:
In [36]: interpolated
Out[36]:
cube temp
cube timestamp
A1 2022-08-01 00:15:05.135 A1 23.17
2022-08-01 00:15:37.255 A1 23.17
2022-08-01 00:23:05.139 A1 23.17
2022-08-01 00:23:15.137 A1 23.17
P19 2022-08-11 00:15:05.135 P19 NaN
或者,如果您更喜欢可读性较差的单行:
df.groupby('cube').apply(lambda g: g.set_index('timestamp').temp.interpolate(method="time",limit_direction = "both"))