【问题标题】:Finding cumulative features in dataframe?在数据框中寻找累积特征?
【发布时间】:2019-08-07 06:25:37
【问题描述】:

我有一个包含大约 200 个特征和 3000 行的数据框。这些数据样本是在不同的时间记录的,基本上是每月一次,如下面的“col101”示例所示:

   0    col1 (id)    col2.    col3   ….   col100    col101 (date)  …     col2000 (target value)
   1        001         653.    675   ….      343.3   01-02-2017.   …                1
   2        001         673.    432   ….      387.3   01-03-2017.   …            0
   3        001         679.    528   ….      401.2   01-04-2017.   …            1
   4        001         685     223   ….      503.4   01-05-2017.   …            1
   5        002         343     428   ….      432.5   01-02-2017.   …            0
   6        002         479.    421   ….      455.3   01-03-2017.   …            0
   7         …             …         …     ….          …               ….            …            .. 

在这些功能中,有些是累积数据,因此每个月它们的值都会增加。例如, col2 和 col100 是我的数据框中的累积特征。所以我想为每个累积特征再添加一列,与上个月有所不同。所以我想要的数据框应该是这样的:

 0  col1 (id)    col2.   col2c   ….    col100     col100c  col101 (date)  …   col2000 (targeva)
 1      001         653.    653  ….    343.3       343.3    01-02-2017.   …            1
 2      001         673.    23   ….    387.3        44      01-03-2017.   …            0
 3      001         679.     6   ….    401.2        13.9    01-04-2017.   …            1
 4      001         685      6   ….    503.4       102.2    01-05-2017.   …            1
 5      002         343     343  ….    432.5       432.5    01-02-2017.   …            0
 6      002         479.    136  ….    455.3        23.2    01-03-2017.   …            0
 7       …             …         …     ….          …               ….            …            .. 

现在,我有两个问题:1)如何自动识别具有 200 个特征的累积特征?以及如何为每个累积属性添加额外的特征(例如 col22c 和 col100c)?有谁知道我该如何处理?

【问题讨论】:

    标签: python dataframe feature-extraction cumulative-sum cumulative-frequency


    【解决方案1】:

    关于区分两列,可以使用pandas内置的diff()函数。 diff() 计算每个元素与前一个元素的差异。但请注意,由于第一个元素没有任何先前的元素,diff() 结果中的第一个元素将是NaN。所以我们使用内置函数dropna() 删除所有NaN 值。

    但至于检测累积列,我认为没有办法。您可以找到所有总是增加(单调)的列,但这并不意味着它们一定是累积的。

    无论如何要检测单调列,您可以先获取它们的diff().dropna(),然后检查这些值是否为正:

    df = some_data_frame
    col_diff = df['some_column'].diff().dropna()
    is_monotonic = all(col_diff > 0)
    

    请注意,如果您忘记了 dropna()all(col_diff > 0) 的结果将始终为 False(因为 NaN 是一个 Falsy 值)

    【讨论】:

    • 是的,通过这种方式,我们可以计算列中各行之间的差异。 Tnx。
    • 但是,考虑到上面的例子,问题是我如何为所有不同的 id (col1) 做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多