我有一个包含大约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)?有谁知道我怎么能处理这个?
关于区分两列,您可以使用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值)