簡體   English   中英

相加時NaN為0,除法時為NaN

[英]Treating NaN as 0 when adding and NaN when dividing

我有一個稀疏的 dataframe ,我需要在其中進行一些涉及添加和加權平均的列操作。

df
     A   B   C    D   E   F
0  NaN NaN NaN   30  15  25  
1  15  25   35  NaN NaN NaN 
2  NaN NaN NaN   35  10  15
3  10  20   35  NaN NaN NaN

現在我必須創建三個新列,其中一列是(A + D) ,一列是((A * B) + (D * E)) / (A + D) ,最后一列是((A * B * C) + (D * E * F)) / ((A * B) + (D * E)) 我遇到的問題是,當我將 NaN 視為 0 時,我會得到錯誤,因為你不能除以 0,但是當我使用 NaN 執行操作時,我的結果是 NaN。 我試着只寫一個條件,但我得到一個錯誤,因為它是一個列,所以它不起作用。 我不想一次做一排,因為速度很重要。 任何幫助將不勝感激。

我讀入了您的數據並使用.fillna(0)替換了NaN值。 這是一個選擇嗎?

import pandas as pd
df = pd.read_clipboard().fillna(0)
df

    A       B       C       D       E       F
0   0.0     0.0     0.0     30.0    15.0    25.0
1   15.0    25.0    35.0    0.0     0.0     0.0
2   0.0     0.0     0.0     35.0    10.0    15.0
3   10.0    20.0    35.0    0.0     0.0     0.0

然后我只是輸入了你的公式:

df['G'] = (df['A'] + df['D'])
df['H'] = ((df['A'] * df['B']) + (df['D'] * df['E'])) / (df['A'] + df['D'])
df['I'] = ((df['A'] * df['B'] * df['C']) + (df['D'] * df['E'] * df['F'])) / ((df['A'] * df['B']) + (df['C'] * df['D']))
df

這是您在下面所期待的嗎?

    A       B       C       D       E       F       G       H       I
0   0.0     0.0     0.0     30.0    15.0    25.0    30.0    15.0    inf
1   15.0    25.0    35.0    0.0     0.0     0.0     15.0    25.0    35.0
2   0.0     0.0     0.0     35.0    10.0    15.0    35.0    10.0    inf
3   10.0    20.0    35.0    0.0     0.0     0.0     10.0    20.0    35.0

最后,如果要將inf值更改為 nan 值,可以使用df.replace(np.inf, np.nan)

暫無
暫無

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

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