繁体   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