在数据框架中查找累积特征



我有一个大约200个功能和3000行的Datframe。这些数据样本在不同的时间内登录,基本上是每月1个,如以下" 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)?有人知道我如何处理吗?

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

但是,对于检测累积柱,我认为不会有任何办法。您 can 找到所有始终增加的列(单调),但这并不意味着它们是累积的。

无论如何,要检测单调列,您可以首先获得其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是虚假的值)

相关内容

  • 没有找到相关文章

最新更新