识别数据框中增加的特征

Identify increasing features in a data frame

我有一个数据框,它显示了一些具有累积值的特征。我需要识别这些特征以恢复累积值。 这是我的数据集的样子(加上大约 50 个变量):

a      b     
346    17    
76     52    
459    70    
680    96    
679    167   
246    180   

我希望实现的是:

a      b     
346    17    
76     35    
459    18    
680    26    
679    71   
246    13   

我似乎是这个答案,但它首先还原值,然后尝试识别列。我不能反其道而行之吗?先识别特征再还原值?

我现在所做的是运行以下代码,以便为我提供具有累积值的特征名称:

 def accmulate_col(value):
     count = 0
     count_1 = False
     name = []
     for i in range(len(value)-1):
         if value[i+1]-value[i] >= 0:
             count += 1
         if value[i+1]-value[i] > 0:
             count_1 = True
     name.append(1) if count == len(value)-1 and count_1 else name.append(0)
     return name

 df.apply(accmulate_col)

之后,我将这些特征名称手动保存在一个名为 cum_features 的列表中并恢复值,创建所需的数据集:

df_clean = df.copy()
df_clean[cum_cols] = df_clean[cum_features].apply(lambda col: np.diff(col, prepend=0))

有没有更好的方法来解决我的问题?

要确定哪些列在整个列中具有递增*值,您需要对所有值应用条件。因此,从这个意义上说,您必须首先使用这些值来确定哪些列符合条件。

除此之外,给定一个数据框,例如:

import pandas as pd
d = {'a': [1,2,3,4],
     'b': [4,3,2,1]
     }
df = pd.DataFrame(d)
#Output:
   a  b
0  1  4
1  2  3
2  3  2
3  4  1

找出哪些列包含增加的值只是对数据框中的所有值使用 diff,并检查哪些值在整个列中增加的问题。

可以写成:

out = (df.diff().dropna()>0).all()
#Output:
a     True
b    False
dtype: bool

然后,您可以只使用列名 select 只有那些带有 True 的列名

new_df = df[df.columns[out]]
#Output:
   a
0  1
1  2
2  3
3  4

*(术语累积并不真正代表您 used.Did 您希望它累积或只是增加的条件?累积意味着特定 row/index 中的值是所有以前的值到该索引,而增加只是那个,当前 row/index 中的值大于以前的值。)