我有一个大约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
是虚假的值)