如何计算groupby后的平均值并在Python中应用?
我想在计算'01'后计算平均值(时间间隔为5分钟)。最好的方法是什么 我收集了5分钟间隔内记录的数据。我想计算一段时间内的平均值。这是示例数据集如何计算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
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