在pandas数据框中计算聚类数据的累积和

给定以下数据框:

  index       value             1          0.8    2          0.9    3          1.0    4          0.9    5          nan    6          nan    7          nan    8          0.4    9          0.9   10          nan   11          0.8   12          2.0   13          1.4   14          1.9   15          nan   16          nan   17          nan   18          8.4   19          9.9   20          10.0   …

其中,’value’数据通过NAN值分隔成多个聚类。我是否可以计算一些值,例如聚类数据的累积和或平均值?例如,我想计算累积和并生成以下数据框:

  index       value        cumsum      1          0.8          0.8    2          0.9          1.7    3          1.0          2.7    4          0.9          3.6    5          nan          0    6          nan          0    7          nan          0    8          0.4          0.4    9          0.9          1.3   10          nan          0   11          0.8          0.8   12          2.0          2.8   13          1.4          4.2   14          1.9          6.1   15          nan          0   16          nan          0   17          nan          0   18          8.4          8.4   19          9.9          18.3   20          10.0         28.3   …

有什么建议吗?

作为问题的简单扩展,如果两个数据聚类足够接近,例如只由一个NAN值分隔,我们可以将它们视为一个数据聚类,这样我们可以得到以下数据框:

  index       value        cumsum      1          0.8          0.8    2          0.9          1.7    3          1.0          2.7    4          0.9          3.6    5          nan          0    6          nan          0    7          nan          0    8          0.4          0.4    9          0.9          1.3   10          nan          1.3   11          0.8          2.1   12          2.0          4.1   13          1.4          5.5   14          1.9          7.4   15          nan          0   16          nan          0   17          nan          0   18          8.4          8.4   19          9.9          18.3   20          10.0         28.3

感谢您的帮助!


回答:

您可以使用比较-累积和-分组模式来完成第一部分。您的“简单扩展”并不那么简单,但我们仍然可以通过找出我们希望视为零的value部分来实现:

n = df["value"].isnull()clusters = (n != n.shift()).cumsum()df["cumsum"] = df["value"].groupby(clusters).cumsum().fillna(0)to_zero = n & (df["value"].groupby(clusters).transform('size') == 1)tmp_value = df["value"].where(~to_zero, 0)n2 = tmp_value.isnull()new_clusters = (n2 != n2.shift()).cumsum()df["cumsum_skip1"] = tmp_value.groupby(new_clusters).cumsum().fillna(0)

生成结果如下:

>>> df    index  value  cumsum  cumsum_skip10       1    0.8     0.8           0.81       2    0.9     1.7           1.72       3    1.0     2.7           2.73       4    0.9     3.6           3.64       5    NaN     0.0           0.05       6    NaN     0.0           0.06       7    NaN     0.0           0.07       8    0.4     0.4           0.48       9    0.9     1.3           1.39      10    NaN     0.0           1.310     11    0.8     0.8           2.111     12    2.0     2.8           4.112     13    1.4     4.2           5.513     14    1.9     6.1           7.414     15    NaN     0.0           0.015     16    NaN     0.0           0.016     17    NaN     0.0           0.017     18    8.4     8.4           8.418     19    9.9    18.3          18.319     20   10.0    28.3          28.3

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注