在数据框中查找累积特征?
Finding cumulative features in dataframe?
我有一个包含大约 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
是一个假值)
我有一个包含大约 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
是一个假值)