如何计算groupby后的平均值并在Python中应用?

如何计算groupby后的平均值并在Python中应用?,python,pandas,Python,Pandas,我想在计算'01'后计算平均值(时间间隔为5分钟)。最好的方法是什么 我收集了5分钟间隔内记录的数据。我想计算一段时间内的平均值。这是示例数据集 captureTime id digits 0 2017-06-26 09:00:00 4015 558460648326103043 1 2017-06-26 09:05:00 4015 13721946658181148 2 2017-06-26 09:10:00 40

我想在计算'01'后计算平均值(时间间隔为5分钟)。最好的方法是什么

我收集了5分钟间隔内记录的数据。我想计算一段时间内的平均值。这是示例数据集

           captureTime    id           digits
0  2017-06-26 09:00:00  4015  558460648326103043    
1  2017-06-26 09:05:00  4015   13721946658181148   
2  2017-06-26 09:10:00  4015  288298648959188992    
3  2017-06-26 09:15:00  4015   27023247031744576    
4  2017-06-26 09:20:00  4015     435887716434584   
5  2017-06-26 09:25:00  4015          2147614720   
6  2017-06-26 09:00:00  4014  558451851700273155    
7  2017-06-26 09:05:00  4014   13721941188808728    
8  2017-06-26 09:10:00  4014  288263395867623424    
9  2017-06-26 09:15:00  4014   18016047776938080    
10 2017-06-26 09:20:00  4014     145547927225032    
11 2017-06-26 09:25:00  4014          3221356544 
以下是我当前的代码:

df_onoff = df_sample.groupby('id')['digits'].apply(lambda nums: "%d" % ', '.join(format(n%2**60,'060b') for n in nums).count('01')).reset_index(name='onoff')
这是df_onoff的输出:

0    34
1    36

我有点困惑,你到底想要什么,01年的问题出在哪里。也许你可以让你的问题更清楚你到底需要什么。第一步可能是将数据按时间格式分组,然后取平均值

df_sample.groupby('captureTime').mean()

和其他人一样,我对你到底想要什么有点困惑

您的输出是每组
id
01
代码之和,而不是平均值。你在上一次发言中表达得太多了,有点难以理解。为什么不简单明了呢

您可以先对数据进行预处理:

(1) 输入

(2) 对
数字的
'01'
计数

df['counts01'] = df.digits.apply(
                 lambda x:format(x%2**60,'060b').count('01'))
# output
           captureTime    id              digits  counts01
0  2017-06-26 09:00:00  4015  558460648326103043         8
1  2017-06-26 09:05:00  4015   13721946658181148         9
2  2017-06-26 09:10:00  4015  288298648959188992         4
3  2017-06-26 09:15:00  4015   27023247031744576         5
4  2017-06-26 09:20:00  4015     435887716434584         8
5  2017-06-26 09:25:00  4015          2147614720         2
6  2017-06-26 09:00:00  4014  558451851700273155         8
7  2017-06-26 09:05:00  4014   13721941188808728         8
8  2017-06-26 09:10:00  4014  288263395867623424         4
9  2017-06-26 09:15:00  4014   18016047776938080         4
10 2017-06-26 09:20:00  4014     145547927225032         8
11 2017-06-26 09:25:00  4014          3221356544         2
现在,您可以应用任何类型的聚合函数

(1) 如果您想为每个
id
计算平均值:

df.groupby('id')['counts01'].mean()
#output
id
4014    5.666667
4015    6.000000
对于您的最后一句话,等式为:

In [27]: df.groupby('id')['counts01'].sum()
Out[27]: 
id
4014    34
4015    36
Name: counts01, dtype: int64
显然,它是每个
id
组的总和

(2) 我不明白你说的“我想计算一段时间内的平均值”是什么意思。如果要随时间进行聚合,可以首先生成一个时间序列(
pd.date\u range
),然后根据该时间序列进行分组


谢谢。

那么,您是否在寻找比现有解决方案更好的解决方案?我看到了您的输出,但我不清楚您到底想要什么。输出不是您想要的吗?@tiba我还没有计算平均值。@BenT我有聚合值作为输出,但之后还没有平均值。我需要应用sum-then-mean的原因如下。假设我们有0110101110。由于每个数字都是一个事件,我将连接所有数字0110001110,然后计数“01”,否则我将在0110和1110之间丢失“01”。同样,如果我不连接1000和1110,我将在两者之间丢失一个'01'。“01”计数的总和应为3,平均值应为1。
In [27]: df.groupby('id')['counts01'].sum()
Out[27]: 
id
4014    34
4015    36
Name: counts01, dtype: int64