数据框列中非零连续值的总和和计数

时间:2019-05-10 19:17:22

标签: python dataframe time-series

我有一个以下格式的数据框:

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])

问题是,出于我的目的,这段代码很慢。感谢您的帮助

1 个答案:

答案 0 :(得分:0)

只是为了给您一些帮助

print(df.groupby("value")['value'].count())
print(df.groupby("value")['value'].mean())
print(df.groupby("value")['value'].sum())

尝试使用groupby及其后续功能

对不起,只是您的问题不太清楚,没有提供任何工作