首页 文章

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

提问于
浏览
0

我有以下格式的数据

输入>

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

    尝试将 dataframe 复制为新的 df 变量,并在每个日期时间的所有秒处 df 生成 'timestamp' 列,然后在 dataframe 中创建一个新列 'sum' ,并使其成为groupby的每个组 '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')
    

    Update:

    我终于按预期工作了:

    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]
    

    现在:

    print(dataframe)
    

    是期望的输出 .

相关问题