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