【发布时间】:2019-05-10 19:17:21
【问题描述】:
我有一个格式如下的数据框:
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])
问题是这段代码对于我的目的来说非常慢。感谢您的帮助
【问题讨论】:
-
能否请您展示到目前为止您尝试了什么?这样别人会更容易帮助你。请查看stackoverflow.com/help/how-to-ask
-
请发布与您发布的数据示例准确的输出示例,同时向我们提供您迄今为止尝试过的内容
-
根据建议修改原始问题
标签: python dataframe time-series