2016-07-06 11 views
2

データフレームの時間を合計する方法Iの形式で時間データのデータフレームを有する

hh:mm:ss 
hh:mm:ss 

(文字列型)私は(合計時間を取得する)値を合計できるようにする必要

いくつかの列で私は誰かがこれを行うための最良の方法についての推奨事項があり、同じ形式で合計を得るかどうか疑問に思っています。

+0

は全体の事1つの文字列、または各行ですか?あなたはそれぞれを合計することを探していますか? – Kupiakos

+0

パンダのデータフレームですか?もしそうなら、パンダのタグを追加できますか? – ayhan

+0

各行は1つの文字列です – LMLPP

答えて

3

あなたは、この使用はtimedelta行うことができます。

import pandas as pd 
import datetime 

data = {'t1':['01:15:31', 
       '00:47:15'], 
     't2':['01:13:02', 
       '00:51:33'] 
     } 

def make_delta(entry): 
    h, m, s = entry.split(':') 
    return datetime.timedelta(hours=int(h), minutes=int(m), seconds=int(s)) 

df = pd.DataFrame(data) 
df = df.applymap(lambda entry: make_delta(entry)) 

df['elapsed'] = df['t1'] + df['t2'] 

In [23]: df 
Out[23]: 
     t1  t2 elapsed 
0 01:15:31 01:13:02 02:28:33 
1 00:47:15 00:51:33 01:38:48 

編集:私は行ない、あなたが列でこれを実行する必要があります参照を。その場合は同じことをしてください:

In [24]: df['t1'].sum() 
Out[24]: Timedelta('0 days 02:02:46') 
+0

ありがとうございました!これをデータフレームのいくつかの特定の行にのみ適用する方法に関する推奨事項はありますか? – LMLPP

+0

もちろん、 'applymap'行で' df = df.applymap'の代わりに 'df [['col1'、 'col2']] = df [['col1'、 'col2']]を実行するだけです。 applymap ... ' – Jeff

1

おそらくdatetime.timedeltaを試してみてください。

import re 
from datetime import timedelta 

_TIME_RE = re.compile(r'(\d+):(\d+):(\d+)') 

def parse_timedelta(line): 
    # Invalid lines (such as blank) will be considered 0 seconds 
    m = _TIME_RE.match(line) 
    if m is None: 
     return timedelta() 
    hours, minutes, seconds = [int(i) for i in m.groups()] 
    return timedelta(hours=hours, minutes=minutes, seconds=seconds) 

def format_timedelta(delta): 
    hours, rem = divmod(delta.seconds + delta.days * 86400, 3600) 
    minutes, seconds = divmod(rem, 60) 
    return '{:02}:{:02}:{:02}'.format(hours, minutes, seconds) 

dataの場合は、行を含むリストである:

print(format_timedelta(sum(parse_timedelta(line) for line in data))) 
3

あなたはsumto_timedeltaを使用することができます。

import pandas as pd 

df = pd.DataFrame({'A': ['18:22:28', '12:15:10']}) 

df['A'] = pd.to_timedelta(df.A) 

print (df) 
     A 
0 18:22:28 
1 12:15:10 

print (df.dtypes) 
A timedelta64[ns] 
dtype: object 

print (df.A.sum()) 
1 days 06:37:38 
+0

' 1日06:37:38は、「同じ形式で」の要件に反します。 'timedelta64'は' strftime'に相当しますか? – Kupiakos

関連する問題