我有一个以下格式的数据框:
timestamp, value
2019-05-03 20:19:19, 0.0
2019-05-03 20:19:20, 5.1
2019-05-03 20:19:21, 5.2
2019-05-03 20:19:22, 4.8
2019-05-03 20:19:23, 0.0
2019-05-03 20:19:24, 0.0
2019-05-03 20:19:25, 8.7
2019-05-03 20:19:26, 9.3
2019-05-03 20:19:27, 2.2
2019-05-03 20:19:28, 0.0
2019-05-03 20:19:29, 0.0
2019-05-03 20:19:30, 0.0
2019-05-03 20:19:31, 2.9
2019-05-03 20:19:32, 2.2
2019-05-03 20:19:33, 0.0
2019-05-03 20:19:34, 0.0
以此类推
我的目标是提取连续的非零值(事件),然后找到每个组的总和,平均值和计数
我希望输出采用以下格式:
[
[15.1,5.033,3],
[20.2,6.73,3],
[5.1,2.55,2],
and so on
]
每个事件的每一行都有3个数字。第一个数字是事件中的数字总和,第三个数字是事件中的数字计数,第二个数字是平均值。我尝试在SO上寻找解决方案,但找不到。我也担心时间效率,因为我在大型数据帧上这样做。
这是我到目前为止所拥有的代码的大致轮廓:
events_matrix = []
current_event = []
def collect_events(self, row):
time, value = row[0], row[1]
if value > 0.0:
current_event.append([time, value])
elif value == 0.0:
events_matrix.append(current_event)
current_event = []
data.apply(lambda x: self.collect_events(x), axis=1)
for index, event in enumerate(events_matrix):
duration = np.size(event, axis=0)
total_sum = np.sum(np.array(event)[:, 1].astype(np.float), axis=0)
average = (total_sum/duration)
flow_and_duration.append([total_sum, average, duration])
问题是,出于我的目的,这段代码很慢。感谢您的帮助
答案 0 :(得分:0)
只是为了给您一些帮助
print(df.groupby("value")['value'].count())
print(df.groupby("value")['value'].mean())
print(df.groupby("value")['value'].sum())
尝试使用groupby及其后续功能
对不起,只是您的问题不太清楚,没有提供任何工作