2017-02-15 13 views
0

私は特定の周波数でサンプリングされたpandasデータフレームを使用するクラスを作成しています。これらの周波数を指定するために使用する引数は、パンダでよく使用されるfrequency stringsです(例: 'H'、 '15min'、 'D')Python Pandasの周波数文字列の比較

私の方法の1つは、これらの周波数を互いに比較する必要がありますもう一方に収まる。これを行うスマートで直接的な方法はありますか?

my_object._get_relative_timediff('8H', 'min') 
480.0 

しかし、私はそこに良い方法があります(またはあるべき)を想像する必要があります。私は、次のことを書いたが、それはとても不格好と間接ようだ:

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 

それは動作します。ありがとう!

答えて

1

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') 

そして、あなたが得る:私は手動で任意の桁なしでの周波数に「1」を追加する必要が

480.0 
12.0 

注意してください。