我具有以下格式的数据
输入>
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秒内。
答案 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]
是所需的输出。