首页 > 解决方案 > Pandas - groupby 累积时间段

问题描述

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

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 等

例如,如果 col1 中的值在每个间隔中为“a”,我想将 col2、col3 的所有值相加并除以另一个。

输出应该是这样的:

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

感谢任何帮助!

标签: pythonpandas

解决方案


首先将索引转换为 timedeltas byto_timedelta并添加15 seconds以进行移位,然后仅通过和( )过滤a行。boolean indexingSeries.eq==

然后,然后和最后将列除以:DataFrame.resample sumDataFrame.cumsumSeries.div

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

另一种方法是转换为datetimes:

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

推荐阅读