pandas 检查多个字段中的值是否相互之间为空?

s2j5cfk0  于 2023-06-28  发布在  其他
关注(0)|答案(2)|浏览(101)

因此,我使用eval函数来对各种字段执行操作。我希望继续使用eval。考虑表达式result = fieldA + feildB然而,我的问题是,如果其中一个字段中有null值,eval返回null,而不是在加法公式的情况下将其视为0。我当前输出的表如下所示:
| 场A|场dB|结果|
| - -----|- -----|- -----|
| 零|零|零|
| 零|5个|零|
| 4| 5个|九个|
| 0|六|六|
我想评估其中一个值(不是两个)是否为null,然后fillna(0)。如果两者都是空的,我想这两个领域保持空。我想要的输出表应该是这样的:
| 场A|场dB|结果|
| - -----|- -----|- -----|
| 零|零|零|
| 0| 5个|5个|
| 4| 5个|九个|
| 0|六|六|
我很困惑,不知道从哪里开始这样一个条件,所以任何帮助都会非常感激。我总是可以屠宰这与循环,但我总是非常顺从地走上这条道路与Pandas。

e4eetjau

e4eetjau1#

如果没有eval,则需要使用addfill_value=0参数:

df['result'] = df['fieldA'].add(df['fieldB'], fill_value=0)

您可以对eval使用相同的语法:

out = df.eval('result = fieldA.add(fieldB, fill_value=0)')

或者:

out = df.eval('result = fieldA.fillna(0) + fieldB.fillna(0)')

输出:

fieldA  fieldB  result
0     NaN     NaN     NaN
1     NaN     5.0     5.0
2     4.0     5.0     9.0
3     0.0     6.0     6.0

可复制输入:

from numpy import nan

df = pd.DataFrame({'fieldA': [nan, nan, 4.0, 0.0],
                   'fieldB': [nan, 5.0, 5.0, 6.0]})
brvekthn

brvekthn2#

你想要的东西用pd.eval不容易做到,为什么不用“标准”Pandas?

cols = ['fieldA', 'fieldB']
m = df[cols].notna().any(axis=1)

out = (df.loc[m, cols].fillna(0)
         .assign(result=lambda x: x.sum(axis=1))
         .reindex(df.index))

输出:

>>> out
   fieldA  fieldB  result
0     NaN     NaN     NaN
1     0.0     5.0     5.0
2     4.0     5.0     9.0
3     0.0     6.0     6.0

相关问题