我一直在写一个类,该类使用以特定频率采样的pandas dataframes。它用来指定这些频率的参数是熊猫中常用的频率字符串(例如'h','15分钟','d')
我的一种方法之一需要将这些频率相互比较 - 其中有多少个适合另一种频率。是否有一种聪明,直接的方法?我写了以下内容,但似乎是如此笨拙和间接:
def _get_relative_timediff(self, freq1, freq2):
""" Returns how many (based on seconds) of frequency 2 goes into frequency 1
"""
old = pd.period_range(start='1/1/1900', freq=freq1, periods=2)[1].to_timestamp()
new = pd.period_range(start='1/1/1900', freq=freq2, periods=2)[1].to_timestamp()
old = (old - pd.to_datetime('1/1/1900')).seconds
new = (new - pd.to_datetime('1/1/1900')).seconds
relative = float(old/new)
return relative
它有效:
my_object._get_relative_timediff('8H', 'min')
480.0
,但我必须想象有一种更好的方法(或应该是)。谢谢!
pd.to_timedelta
可用于将str转换为一个时间段。这是一个示例:
import pandas as pd
import re
def to_timedelta(freq):
# Add '1' to freq that doesn't have any digit
if not bool(re.search(r'd', freq)):
freq = '1{}'.format(freq)
# Convert str to datetime.timedelta
return pd.to_timedelta(freq)
def get_relative_timediff(freq1, freq2):
return to_timedelta(freq1) / to_timedelta(freq2)
print get_relative_timediff('8H', 'min')
print get_relative_timediff('4D', '8H')
您得到:
480.0
12.0
注意,我必须手动将" 1"添加到频率上,而无需任何数字。