【问题标题】:Sum and Count of Non-Zero Consecutive Values in a Dataframe Column数据框列中非零连续值的总和和计数
【发布时间】: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


【解决方案1】:

只是给你一个提示:

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

尝试使用 groupby 及其跟随功能。

抱歉,您的问题不太清楚,没有提供任何工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2017-12-30
    • 1970-01-01
    • 2015-10-07
    • 2013-06-04
    • 2014-12-19
    相关资源
    最近更新 更多