在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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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