データフレームの時間を合計する方法Iの形式で時間データのデータフレームを有する
hh:mm:ss
hh:mm:ss
(文字列型)私は(合計時間を取得する)値を合計できるようにする必要
いくつかの列で私は誰かがこれを行うための最良の方法についての推奨事項があり、同じ形式で合計を得るかどうか疑問に思っています。
データフレームの時間を合計する方法Iの形式で時間データのデータフレームを有する
hh:mm:ss
hh:mm:ss
(文字列型)私は(合計時間を取得する)値を合計できるようにする必要
いくつかの列で私は誰かがこれを行うための最良の方法についての推奨事項があり、同じ形式で合計を得るかどうか疑問に思っています。
あなたは、この使用は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')
おそらく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)))
あなたはsum
でto_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
' 1日06:37:38は、「同じ形式で」の要件に反します。 'timedelta64'は' strftime'に相当しますか? – Kupiakos
は全体の事1つの文字列、または各行ですか?あなたはそれぞれを合計することを探していますか? – Kupiakos
パンダのデータフレームですか?もしそうなら、パンダのタグを追加できますか? – ayhan
各行は1つの文字列です – LMLPP