python - Pandas:对 DataFrame 的每一列进行 nansum 系列

标签 python pandas

我想对 DataFrame 的每一列求和,具有与 nansum 相同的行为:如果缺少一个组件,则返回另一个组件;如果两者都缺失,则返回 NaN/0。

测试用例:

import numpy as np
import pandas as pd

df = pd.DataFrame([[np.nan, 1], [2, 2], [3, 4]])
ts = pd.Series([1, np.nan, 4])

尝试 1(缺少一个时给出 nan):

df.add(ts, axis=0)

Out[115]: 
     0    1
0  NaN  2.0
1  NaN  NaN
2  7.0  8.0

尝试 2(抛出错误):

df.add(ts, axis=0, fill_value=0)
NotImplementedError: fill_value 0 not supported.

预期输出:

   0  1
0  1  2
1  2  2
2  7  8

注意:我可以通过保存 NaN 的位置,用 0 填充 NaN 进行求和,并在两者都是 NaN 时设置为 NaN,但我正在寻找更好的解决方案。

最佳答案

None 之外的任何内容的

fill_value 仍在进行中,但截至目前,您必须解决此问题。执行加法,然后计算掩码以在需要时恢复 NaN

r = df.fillna(0).add(ts.fillna(0), axis=0)

m = df.isnull().__and__(ts.isnull(), axis=0).values
v = r.values
v[m] = np.nan

r[:] = v 
r
     0    1
0  1.0  2.0
1  2.0  2.0
2  7.0  8.0

关于python - Pandas:对 DataFrame 的每一列进行 nansum 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47752711/

相关文章:

python - 根据日期对列表进行排序

Python类函数及自用

python - 如何创建新日期并作为索引插入 pandas 数据框中?

python - 匹配 Excel 文件中的两列并获取其他列值 - Python Pandas

python - 用列表中的值替换 pandas.DataFrame 的 NaN 值

python - 全局数据框 - 好还是坏

python - 如何使用python获取zip文件中所有文件(或给定文件名)的偏移值?

Python:为什么使用 re.IGNORECASE 编译的正则表达式会删除第一个字符?

python - 明确关闭异步事件循环的必要性

python - 从 pandas 网站读取大型数据集仅返回 1.000 行?