Python Pandas频率字符串比较



我一直在写一个类,该类使用以特定频率采样的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"添加到频率上,而无需任何数字。

最新更新