首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas Dataframe的时频变化

Pandas Dataframe的时频变化
EN

Stack Overflow用户
提问于 2014-10-13 14:44:20
回答 2查看 7.5K关注 0票数 8

我有一个熊猫DataFrame如下所示。

代码语言:javascript
复制
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间隔。但是,请在下面获得错误:

代码语言:javascript
复制
new = df.asfreq('1Min')
>>error: cannot reindex from a duplicate axis

现在,我明白为什么会这样了。由于我的时间粒度很高(以毫秒为单位),但不规则,所以我每分钟获得多个读数,甚至每秒都是如此。所以我试着把这些毫秒读数和几分钟结合起来,然后去掉下面的复制件。

代码语言:javascript
复制
# 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的函数,该函数将以1分钟递增。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-13 16:52:11

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

代码语言:javascript
复制
new = df.resample('T', how='mean')

对于how选项,也可以使用“最后”或“第一”。

票数 6
EN

Stack Overflow用户

发布于 2022-05-24 21:16:37

变换数据帧的Pandas Dataframe.resample()函数具有将时间频率从秒变到分钟、小时、日、年等功能,它与DatetimeIndex字段和datetime列完美地工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26342713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档