簡體   English   中英

識別數據框中不斷增加的功能

[英]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

然后,您可以僅使用列名選擇其中包含True那些列。

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

*(術語“累計”並不真正代表您所使用的條件。您希望它是累計的還是只是增加?累積表示特定行/索引中的值是該索引之前所有先前值的總和,同時增加僅僅是,當前行/索引中的值大於先前的值。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM