我正在使用以下格式的一些TimeSeries数据:
1984-12-12 14:08:00
1984-12-12 14:25:00
1984-12-12 14:47:00
1984-12-12 16:37:00
1984-12-12 16:37:00
1984-12-12 16:37:00
1984-12-12 17:52:00
1984-12-12 17:52:00
1984-12-12 19:29:00
在过去的几个days!
中,似乎只是一些简单的操作(一个愉快的下午),已经变成了ha and和严峻。
以下是reqs btw:
首先,当我接近大熊猫和整个group-apply-combine
范例时,我喜欢做的是
我认为这是标准的,我喜欢使用它的原因是组,多列和新列插入的隐式连接。 (它还会删除群组循环,使矢量化变得更容易)...但我认为处理空群体时遇到了麻烦......
无论如何,为了获得TimeSeries的差异,我发现使用shift()
来获得时间差异引发StopIteration
错误,使用diff(1)
没有错误。
但是,新增量列(具有事件的行之间的时差)将变为系列。
time ev delta
1984-12-12 14:08:00 1 NaT
1984-12-12 14:25:00 1 00:17:00
1984-12-12 14:47:00 1 00:22:00
1984-12-12 16:37:00 0 01:50:00
1984-12-12 16:37:00 1 01:50:00
1984-12-12 16:37:00 0 01:50:00
1984-12-12 17:52:00 0 01:15:00
1984-12-12 17:52:00 1 01:15:00
1984-12-12 19:29:00 1 01:37:00
尝试将Series转换为TimeSeries证明是无用的。格式问题引发了一个错误(非常长的数字+ L不是以小时,分钟,秒的形式发现的),这显然会中止整个尝试并尝试抓住它不能通过它。
try:
pd.to_datetime(d['delta'], format='%H:%M:%S')
except:
pass
另一个不断弹出的错误是获得一个时间总和的StopIteration
错误。
gg['cumt'] = pd.rolling_apply( gg['time'], 2, np.sum )
gg['cumt'] = pd.rolling_sum(gg['time'],2).shift(1)
gg['cumt'] = gg.apply(lambda x: pd.expanding_sum(x['time'], min_periods=2) )
我相信这是一个简单的cumsum
没有抛出错误gg['cumt'] = gg['tavg'].cumsum()
,但是时间格式问题会导致字符串转换为某个int,并将它们相加为微小数字。
任何帮助,一般或具体的表示赞赏:
我喜欢写一个函数并返回一个组的简单想法。我没有过多地研究transform
函数(不要以为我可以让它工作);在函数中返回修改后的组不需要转换/广播。这是导致我StopIteration
错误的原因吗?我觉得它无法处理某些群体是空的?
答案 0 :(得分:4)
Pandas 0.12.0,Numpy 1.7.1,Python 2.7.5,Linux Mint
import pandas as pd
import StringIO
data = '''time
1984-12-12 14:08:00
1984-12-12 14:25:00
1984-12-12 14:47:00
1984-12-12 16:37:00
1984-12-12 16:37:00
1984-12-12 16:37:00
1984-12-12 17:52:00
1984-12-12 17:52:00
1984-12-12 19:29:00'''
df = pd.read_csv(StringIO.StringIO(data))
df['time'] = pd.DatetimeIndex(df['time'])
df['delta'] = df['time'].diff()
#df['delta'] = pd.TimeSeries(df['delta']) # sorry, not needed
#df['delta'][0] = 0 # to remove NaT
# better method to remove NaT - thanks to Jeff
df['delta'] = df['delta'].fillna(0)
df['cumsum'] = df['delta'].cumsum()
print df
结果
time delta cumsum
0 1984-12-12 14:08:00 00:00:00 00:00:00
1 1984-12-12 14:25:00 00:17:00 00:17:00
2 1984-12-12 14:47:00 00:22:00 00:39:00
3 1984-12-12 16:37:00 01:50:00 02:29:00
4 1984-12-12 16:37:00 00:00:00 02:29:00
5 1984-12-12 16:37:00 00:00:00 02:29:00
6 1984-12-12 17:52:00 01:15:00 03:44:00
7 1984-12-12 17:52:00 00:00:00 03:44:00
8 1984-12-12 19:29:00 01:37:00 05:21:00