簡體   English   中英

Pandas DataFrame:根據最小/最大列計算值

[英]Pandas DataFrame: Compute values based on column min/max

我有一個NxN DataFrame,其值需要縮放到表示重要性的值范圍,其中0是不相關的,而3是非常重要的。

當然,我使用的公式取決於每列的最小值和最大值,每列的最小值和最大值不同:Col A的范圍可能是1-12,而Col B的范圍可能是1M至45M。

這是我正在使用的公式。

min_importance + ((max_importance - min_importance) / (max_spec_value - min_spec_value)) * (spec_value - min_spec_value)

如何在保留索引的同時創建每列具有縮放值的新DataFrame或字典,以后需要進行標識?

我嘗試使用上述公式創建一個函數,並使用apply()為每一行調用該函數,但是我無法將列的最小值/最大值傳遞給該函數,因此無法正常工作。

DataFrame示例(“機身:零售價”和“機身:傳感器分辨率”為列):

Body: retail price  Body: sensor resolution  
Body name                                                            
Nikon D500                        2000.00                 20668416   
Nikon D7000                       1200.00                 16084992   
Sony Alpha 7R II                  3199.00                 42177408   
Canon EOS 5D Mark III             3499.00                 22118400   
Canon 7D Mark II                  1799.00                 19961856   
iPhone 6 (front)                   699.00                  1000000   
iPhone 6 (rear)                    699.00                  7990272   
Fujifilm X-T1                     1299.95                 15980544   
Fujifilm X-T2                     1599.00                 24000000

最小-最大歸一化可以使用:

(df - df.min()) / (df.max() - df.min())
Out: 
                       Body: retail price  Body: sensor resolution
Body name                                                         
Nikon D500                       0.464643                 0.477651
Nikon D7000                      0.178929                 0.366341
Sony Alpha 7R II                 0.892857                 1.000000
Canon EOS 5D Mark III            1.000000                 0.512864
Canon 7D Mark II                 0.392857                 0.460492
iPhone 6 (front)                 0.000000                 0.000000
iPhone 6 (rear)                  0.000000                 0.169760
Fujifilm X-T1                    0.214625                 0.363805
Fujifilm X-T2                    0.321429                 0.558559

您不需要申請。 df.min()將返回一個序列,並且在執行df - df.min()熊貓將從每個值中減去相應列的最小值。 這稱為廣播,這使任務變得更容易。

如果每列的重要性級別不同,則最好的做法是將其存儲在數據框中:

importances = pd.DataFrame({'max_imp': [1, 3], 'min_imp': [0, 0]}, index= df.columns)
importances
Out: 
                         max_imp  min_imp
Body: retail price             1        0
Body: sensor resolution        3        0

現在,以相同的原理,您可以調整公式:

importances['min_imp'] + ((importances['max_imp'] - importances['min_imp']) / (df.max() - df.min())) * (df - df.min())
Out: 
                       Body: retail price  Body: sensor resolution
Body name                                                         
Nikon D500                       0.464643                 1.432952
Nikon D7000                      0.178929                 1.099024
Sony Alpha 7R II                 0.892857                 3.000000
Canon EOS 5D Mark III            1.000000                 1.538591
Canon 7D Mark II                 0.392857                 1.381475
iPhone 6 (front)                 0.000000                 0.000000
iPhone 6 (rear)                  0.000000                 0.509280
Fujifilm X-T1                    0.214625                 1.091415
Fujifilm X-T2                    0.321429                 1.675676

請注意, importances索引和實際數據框的列應匹配。 在此示例中,第一列的范圍轉換為[0-1],第二列的范圍轉換為[0-3]。

暫無
暫無

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

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