Pandas .asfreq给出了重复的索引错误

时间:2016-06-07 21:58:48

标签: python pandas

我正在尝试与Pandas ffill制作一些常规时间序列,但我收到的是非唯一索引错误。

这是我的代码:

for d in data_types:
    series = df[df['datatype'] == d]['measurementvalue'].values
    times = df[df['datatype'] == d]['displaydate'].values
    data_series = pd.Series(series, index = times)
    data_series.drop_duplicates(inplace = True)
    data_series.asfreq('30Min', method = 'ffill')
    all_series.append(data_series)

由于对asfreq data_type的{​​{1}}调用,我收到以下错误:

ValueError: cannot reindex a non-unique index with a method or limit

这是针对一组数据,其中drop_duplicates导致长度从2119下降到1299,这表明它是最密集的(时间明智的)值。

==========

修改

我做了一些探索,并通过将时间滞后到指数中最接近的秒来缩小问题,我可以看到当两行落入同一秒时创建的“重复”索引。我的猜测是这些是令人讨厌的行......

2016-03-02 04:03:29.693    8.250347
2016-03-02 04:03:29.693    7.478983
2016-03-06 00:19:30.183    45.97248
2016-03-06 00:19:30.183    24.06088
2016-03-14 02:44:58.783    9.169300
2016-03-14 02:44:58.783    4.221998
2016-03-18 21:54:20.097    73.80586
2016-03-24 16:41:19.825    3.608202
2016-03-24 16:41:19.825    3.887996
2016-03-25 03:35:57.197    4.974968
2016-03-25 03:35:57.197    5.638140
2016-04-02 11:18:27.290    7.923712
2016-04-02 11:18:27.290    6.143240
2016-04-10 19:59:54.677     3.143636
2016-04-10 19:59:54.686    14.222390

降低价值的最佳方式是什么?假设我想编写一个自定义方法,它向我发送给定索引值的所有重复值,并发回应该用于该索引值的单个值。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

尝试这样的事情,但既然你没有包含任何数据,这只是一个启动者。

for d in data_types:
        rawDf       = df[df['datatype'] == d]
        data_series = rawDf[['measurementvalue','displaydate']]
        data_series.set_index('displaydate',drop=False, inplace = True)
        data_series.drop_duplicates(inplace = True)
        data_series.asfreq('30Min', method = 'ffill')
        all_series.append(data_series)

答案 1 :(得分:0)

如果您想保持每个日期时间的最大值。首先使date_time成为一列并使用

df.groupby('date_time').max()

如果您想始终保留第一个或最后一个条目look at this answer