python中的日志转换和索引更改

2024-09-27 19:09:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为日志转换编写一个helper类函数。它需要:

  1. 对每个列变量应用日志。
  2. 将这个新生成的变量命名为“logu variable”。例如,对于变量'InqCnt06',我需要创建一个名为“loginqcnt06”的新变量。
  3. 如果df[variables]列中的值为零或丢失,请记录(variable_value+1),以避免返回“-inf”。
  4. 查找原始变量的索引。
  5. indexplus添加到原始变量的索引中,并使其成为“log_variable”的索引。

对于丢失的值或零值,我该如何处理log(variable_value +1)?我用isnull()找到了值,我可以用where.isnull()函数吗?

我也很难将原始变量索引添加到indexplus,并将其分配给log_variable的索引。

这是我的代码:

def add_log_transform(df, variable, indexplus = 1):
        print df[variable].isnull()
        log_variable = (np.log(df[variable]))
def main():
    variables_needs_tranform = ['DerogCnt', 'CollectCnt', 'InqCnt06', 'InqTimeLast', 'InqFinanceCnt24', 'TLTimeFirst', 'TLTimeLast', 'TLCnt03', 'TLCnt12', 'TLCnt24', 'TLCnt', 'TLSum', 'TLMaxSum', 'TLDel60Cnt', 'TLBadCnt24', 'TL75UtilCnt', 'TL50UtilCnt', 'TLBalHCPct', 'TLSatPct', 'TLDel3060Cnt24', 'TLDel90Cnt24', 'TLDel60CntAll', 'TLBadDerogCnt', 'TLDel60Cnt24', 'TLOpen24Pct']
util.add_log_transform(df, variables_needs_tranform, indexplus = 1)

if __name__ == "__main__":
        main()

这是我测向仪的样本。

    DerogCnt  CollectCnt  InqCnt06  InqTimeLast  InqFinanceCnt24  TLTimeFirst  \
0          1           1         7            1                4          125   
1          1           1         2            1                0          252   
2          0           0         1            1                4          254   
3          0           0         6            3                6          154   
4          0           0         1            0                1          311   
5          1           1         1            1                2          200   
6          2           0         3            1                2          137   
7          0           0         3            2                1          267   
8          0           0         0           16                3          359   
9          1           1         1            6                3          141   
10         0           0         1            4                1          487   
11         0           0         4            1                4           78   
12         3           3         4            0                5          117   
13         2           2         1            0                4          101   
14         1           1         2            1                8          260   
15         0           0         5            1                6          295   
16         0           0         0          NaN                0          223   
17        15           9         3            1                3           14   
18         0           0         3            2                7          345   
19         0           0         4            4                5          145   
20         0           0         3            1                3          222   
21         0           0         1            5                1          354   
22         8           8         0            8                2          111   
23         0           0         1            1                3           56   
24         8           5         6            1               10           16   

TLTimeLast  TLCnt03  TLCnt12  TLCnt24     ...       TL75UtilCnt  \

0            3        1        3        5     ...                 3   
1           18        0        0        2     ...                 1   
2           12        0        1        2     ...                 3   
3            3        1        9       11     ...                 4   
4           17        0        0        1     ...                 2   
5            7        0        1        2     ...                 1   
6           12        0        1        2     ...                 2   
7            2        3        6        8     ...                 1   
8           23        0        0        1     ...                 0   
9            8        0        1        4     ...                 7   
10          12        0        1        6     ...                 9   
11           4        0        7       10     ...                 1   
12          27        0        0        0     ...                 3   
13          12        0        1        1     ...                 3   
14          16        0        0        2     ...                 2   
15           8        0        4       11     ...                 9   
16          18        0        0        1     ...                 2   
17          14        0        0        1     ...                 1   
18           2        2        2        4     ...                 3   
19           3        1        2        2     ...                 2   
20          22        0        0        1     ...                 1   
21           7        0        2       10     ...                 4   
22          24        0        0        1     ...                 0   
23          40        0        0        0     ...                 0   
24           4        0        2        4     ...                 2   

TL50UtilCnt  TLBalHCPct  TLSatPct  TLDel3060Cnt24  TLDel90Cnt24  \
0             4        0.85      0.67               0             0   
1             2        0.48      0.30               0             1   
2             3        0.84      0.67               0             1   
3             5        0.73      0.76               0             1   
4             3        0.88      0.63               0             0   
5             1        0.13      0.25               1             1   
6             2        0.70      0.64               0             0   
7             1        0.47      0.42               0             1   
8             2        0.41      0.69               0             0   
9             7        0.84      0.67               0             0   
10           10        0.77      0.82               0             0   
11            2        0.79      0.74               0             0   
12            3        0.92      0.21               2             3   
13            4        0.90      0.22               3             0   
14            3        0.80      0.35               0             1   
15           12        0.47      0.73               0             0   
16            4        0.89      0.57               3             0   
17            1        0.80      0.00               0             0   
18            3        0.86      0.52               0             0   
19            3        0.59      0.41               0             2   
20            2        0.25      0.62               2             0   
21            5        0.36      0.65               0             1   
22            0        0.38      0.40               0             0   
23            0        0.28      0.20               3             1   
24            3        0.91      0.25               1             1   

TLDel60CntAll  TLBadDerogCnt  TLDel60Cnt24  TLOpen24Pct  

0               1              0             0         0.71  
1               4              2             1         0.50  
2               1              1             1         0.33  
3               1              1             1         1.22  
4               1              0             0         0.20  
5               3              1             1         0.67  
6               0              2             0         0.40  
7               2              1             1         2.00  
8               2              0             0         0.17  
9               0              1             0         0.44  
10              0              0             0         0.46  
11              0              0             0         1.67  
12              7              4             4         0.00  
13              4              1             2         0.17  
14              1              1             1         0.67  
15              0              0             0         0.28  
16              5              0             2         0.17  
17              0             12             0         1.00  
18              0              0             0         0.67  
19              7              2             2         0.25  
20              3              0             1         0.10  
21              1              1             1         0.53  
22              0              4             0         0.50  
23              4              1             3         0.00  
24              1              7             1         1.33  

Tags: 函数logadddfindexvaluemaindef
1条回答
网友
1楼 · 发布于 2024-09-27 19:09:26

让我来回答你问题的一个简化版本:

# example dataframe
df = pd.DataFrame({'a': [0, 1, 2, 3], 
                   'b': [4, 5, np.nan, 7], 
                   'c': [8, 9, 10, 11]})

# apply log(x+1) element-wise to a subset of columns
to_log = ['a', 'b']
df_log = df[to_log].applymap(lambda x: np.log(x+1))

# rename columns
df_log.columns = 'log_' + df_log.columns

# shift the index
df_log.index = df_log.index + 1

如果要对丢失的值进行特殊处理,可以执行以下操作:

df_log[df_log.isnull()] = -1

现在,您可以将所有这些放在helper函数中。

相关问题 更多 >

    热门问题