【问题标题】:Changing time frequency in Pandas Dataframe更改 Pandas Dataframe 中的时间频率
【发布时间】:2014-12-08 04:17:24
【问题描述】:

我有一个如下所示的 Pandas DataFrame。

df
                              A           B
date_time                                    
2014-07-01 06:03:59.614000  62.1250       NaN
2014-07-01 06:03:59.692000  62.2500       NaN
2014-07-01 06:13:34.524000  62.2500  241.0625
2014-07-01 06:13:34.602000  62.2500  241.5000
2014-07-01 06:15:05.399000  62.2500  241.3750
2014-07-01 06:15:05.399000  62.2500  241.2500
2014-07-01 06:15:42.004000  62.2375  241.2500
2014-07-01 06:15:42.082000  62.2375  241.3750
2014-07-01 06:15:42.082000  62.2375  240.2500

我想将其频率更改为常规的1 minute 间隔。但得到以下错误:

new = df.asfreq('1Min')
>>error: cannot reindex from a duplicate axis

现在,我明白为什么会这样了。由于我的时间粒度很高(以毫秒为单位)但不规则,我每分钟甚至每秒都会获得多个读数。因此,我尝试将这些毫秒读数与分钟相结合,并消除重复数据,如下所示。

# try to convert the index to minutes and drop duplicates
df['index'] = df.index
df['minute_index']= df['index'].apply( lambda x: x.strftime('%Y-%m-%d %H:%M'))
df.drop_duplicates(cols = 'minute_index', inplace = True, take_last = True)
df_by_minute = df.set_index('minute_index')
df_by_minute
                        A                B               index
minute_index                                                     
2014-07-01 06:03    62.2500        NaN 2014-07-01 06:03:59.692000
2014-07-01 06:13    62.2500     241.50 2014-07-01 06:13:34.602000
2014-07-01 06:15    62.2375     240.25 2014-07-01 06:15:42.082000

# now change the frequency to 1 minute but I just get NaNs (!)
df_by_minute.asfreq('1Min')
                            A          B   index
2014-07-01 06:03:00        NaN        NaN   NaT
2014-07-01 06:04:00        NaN        NaN   NaT
2014-07-01 06:05:00        NaN        NaN   NaT
2014-07-01 06:06:00        NaN        NaN   NaT
2014-07-01 06:07:00        NaN        NaN   NaT
2014-07-01 06:08:00        NaN        NaN   NaT
2014-07-01 06:09:00        NaN        NaN   NaT
2014-07-01 06:10:00        NaN        NaN   NaT
2014-07-01 06:11:00        NaN        NaN   NaT
2014-07-01 06:12:00        NaN        NaN   NaT
2014-07-01 06:13:00        NaN        NaN   NaT
2014-07-01 06:14:00        NaN        NaN   NaT
2014-07-01 06:15:00        NaN        NaN   NaT

如您所见,它不起作用..有人可以帮忙吗?我想要实现的是获得一个返回 A or B as of DateTime 的函数,并且 DateTime 将以 1Min 为增量。

【问题讨论】:

    标签: python pandas time-series time-frequency


    【解决方案1】:

    我认为,asfreq 不是 resample 适合您的需求:

    new = df.resample('T', how='mean')
    

    对于how 选项,您还可以使用“last”或“first”。

    【讨论】:

    • 谢谢!很沮丧,我完全忽略了这个功能。
    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2020-04-04
    • 2018-03-13
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多