Python 熊猫-按累计时间段分组

Python 熊猫-按累计时间段分组,python,pandas,Python,Pandas,我的问题是: 想象一个按时间索引的数据帧 df = pd.DataFrame(index=["00:00:00", "00:00:08","00:00:14","00:00:21","00:00:23","00:00:49"],data={"col1":["a", "b","a","a", "c", "d"], "col2":[4,4,4,6,6,7], "col3":[2,17,2,2,3,50]}) 现在,我想应用一个函数,并根据15秒间隔内的累积时间对数据进行分组,即时间戳在00:0

我的问题是: 想象一个按时间索引的数据帧

df = pd.DataFrame(index=["00:00:00", 
"00:00:08","00:00:14","00:00:21","00:00:23","00:00:49"],data={"col1":["a", 
"b","a","a", "c", "d"], "col2":[4,4,4,6,6,7], "col3":[2,17,2,2,3,50]})
现在,我想应用一个函数,并根据15秒间隔内的累积时间对数据进行分组,即时间戳在00:00:00-00:00:15、00:00:00-00:00:30、00:00:00-00:00:45等之间

比如说,我想求col2,col3的所有值之和,然后一个除以另一个,如果col1中的值在每个区间都是a

输出应该类似于:

         output
00:00:15    2
00:00:30    2.3333

谢谢你的帮助

首先将索引转换为timedelta by,并添加15秒的移位时间,然后仅按and==过滤一行

然后求和,然后将列和最后一列除以:

替代方法是转换为日期时间:


首先将索引转换为timedelta by,并添加15秒的移位时间,然后仅按and==过滤一行

然后求和,然后将列和最后一列除以:

替代方法是转换为日期时间:


看起来您需要重采样函数,而不是groupby。看起来您需要重采样函数,而不是groupby。抱歉,我在输出中出错。这将为我提供单个15秒桶的总和,但我想要一个累积总和,总是从00:00:00开始到下一个15秒的时间间隔。@SanMu-你能解释2.3333的值吗?如何计算?因此,对于col1中的所有a,将col2中的对应值之和除以col3中00:00:00和00:00:30之间的对应值之和,即14/6=2.3333。希望这是有道理的,我在输出中有一个错误。这将为我提供单个15秒桶的总和,但我想要一个累积总和,总是从00:00:00开始到下一个15秒的时间间隔。@SanMu-你能解释2.3333的值吗?如何计算?因此,对于col1中的所有a,将col2中的对应值之和除以col3中00:00:00和00:00:30之间的对应值之和,即14/6=2.3333。希望这是有道理的,我在输出中有一个错误。这将为我提供单个15秒存储桶的总和,但我想要一个累积总和,总是从00:00:00开始到下一个15秒的时间间隔。然后只需在之后添加.cumsum.resample,就像jezrael Did抱歉一样,我在输出中有一个错误。这将为我提供单个15秒桶的总和,但我想要一个累积总和,总是从00:00:00开始到下一个15秒的时间间隔。然后在之后添加.cumsum.resample,就像jezrael做的那样
df.index = pd.to_timedelta(df.index) + pd.Timedelta(15, unit='s')

df = df[df['col1'].eq('a')].resample('15S').sum().cumsum()
df['out'] = df['col2'].div(df['col3'])
print (df)
          col2  col3       out
00:00:15     8     4  2.000000
00:00:30    14     6  2.333333
df.index = pd.to_datetime(df.index) + pd.Timedelta(15, unit='s')

df = df[df['col1'].eq('a')].resample('15S').sum().cumsum()
df['out'] = df['col2'].div(df['col3'])
print (df)
                     col2  col3       out
2019-03-21 00:00:15     8     4  2.000000
2019-03-21 00:00:30    14     6  2.333333
df = pd.DataFrame(index=["00:00:00", "00:00:08","00:00:14","00:00:21","00:00:23","00:00:49"],data={"col1":["a","b","a","a", "c", "d"], "col2":[4,4,4,6,6,7], "col3":[2,17,2,2,3,50]})
df.index = pd.to_datetime(df.index, format='%H:%M:%S')
df = df[df['col1']=='a'].resample('15s', how='sum').cumsum()
df['output'] = df['col2']/df['col3']