在 pandas 中处理时间序列数据时,如何解决“ValueError:无法在具有重复标签的轴上重新索引”错误?

问题描述 投票:0回答:2
                       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:无法在具有重复标签的轴上重新索引”。我无法删除重复的标签(时间戳),因为它可能属于 不同的立方体。请建议处理这种情况的替代方案。

python pandas time-series valueerror
2个回答
0
投票

您想要用作索引的列中可能有重复的值。索引值需要是唯一的。

您可以通过

df['timestamp'].duplicated()

找到它们

0
投票

我认为问题源于首先设置重复索引,然后执行

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"))
© www.soinside.com 2019 - 2024. All rights reserved.