当前行时间戳记后1秒内的值求和

时间:2018-12-10 03:26:20

标签: python pandas time-series

我具有以下格式的数据

输入>

import pandas as pd
dataframe = pd.DataFrame({'value':[1,2,3,4,5], 'groupings':['groupa','groupa','groupa','groupa','groupb'], 'timestamp':['yyyy-mm-dd 00:16:35.111','yyyy-mm-dd 00:16:45.111','yyyy-mm-dd 00:16:30.111','yyyy-mm-dd 00:16:35.411','yyyy-mm-dd 00:16:35.211']})

输出>

    groupings   timestamp   value
0   groupa  yyyy-mm-dd 00:16:35.111 1
1   groupa  yyyy-mm-dd 00:16:45.111 2
2   groupa  yyyy-mm-dd 00:16:30.111 3
3   groupa  yyyy-mm-dd 00:16:35.411 4
4   groupb  yyyy-mm-dd 00:16:35.211 5

我想在同一组中的时间戳记的1秒内创建另一列总和, 例如

    groupings   timestamp         value  sum
0   groupa  yyyy-mm-dd 00:16:35.111 1     5
1   groupa  yyyy-mm-dd 00:16:45.111 2     2
2   groupa  yyyy-mm-dd 00:16:30.111 3     3
3   groupa  yyyy-mm-dd 00:16:35.411 4     5
4   groupb  yyyy-mm-dd 00:16:35.211 5     5

我应该如何实现这一目标? 预先谢谢你,

编辑: 明确地说,我并不是说简单地将那个精确秒的所有值相加。例如,00:16:34.899的值仍在00:16:35.011的1秒内。

1 个答案:

答案 0 :(得分:0)

尝试将此复制dataframe作为新的df变量,并在df的{​​date}的每个日期时间的所有秒创建'timestamp'列,然后创建一个新的列{{1} },放在'sum'中,并使其成为groupby的每个组dataframe列的总和:

'value'

更新

我终于按预期工作了:

df=dataframe.copy()
df['timestamp']=pd.to_datetime(df['timestamp'].str.split().apply(lambda x: x[-1])).dt.second
dataframe['sum']=df.groupby(['groupings','timestamp'])['value'].transform('sum')

现在:

df=dataframe.copy()
df['timestamp']=pd.to_datetime(df['timestamp'].str.split().apply(lambda x: x[-1]))
threshold = pd.Timedelta(seconds=1)
dataframe['sum'] = df.groupby('groupings',as_index=False).apply(lambda df: [df.loc[(df['timestamp'] - t).abs() < threshold, 'value'].sum()
             for t in df['timestamp']])
dataframe['sum']=[x for i in dataframe['sum'].fillna('').tolist() for x in i]

是所需的输出。