python - 如何在缺失值 NaN 的条件下将两个数据帧(相同索引)中的值平均到一个 df 中?

标签 python pandas

我使用两个数据框(一个是从 1981 年至今的降雨量数据得出的,另一个是从 2002 年至今的植被指数数据得出的)。

pR:

MonthDekad            01d1        01d2       01d3       02d1       02d2  \
AdminCode Year                                                            
2688      1981    2.702703    2.702703   2.702703   2.702703   2.702703   
          1982   16.216216   21.621622  18.918919  32.432432  54.054054   
          ...........   
          2016   0.166331     0.318759   0.431364   0.492916   0.632023   
          2017  -0.492916    -0.431364        NaN        NaN        NaN

和 pV:

MonthDekad          01d1      01d2      01d3      02d1      02d2  \
AdminCode Year                                                               
2688      2002       NaN       NaN       NaN       NaN       NaN        
          2003  0.477121  0.477121  0.477121  0.477121  0.477121       
          ............ 
          2016       NaN  0.636822  0.000000  0.000000  0.000000 
          2017 -0.636822 -0.636822       NaN       NaN       NaN  

两者的索引方式相同(多索引,level0 = 本地化的管理代码,level1 代表年份),并且列是年份的十位数。

我需要将它们组合成一个数据帧,通过

  • 对同一索引位置对应的 2 个值求平均值,前提是这两个值都是数字,
  • 否则(如果两者之一缺失/NaN),最终值应为未缺失的值(例如:1981 年至 2002 年,仅降雨量值)。
  • 当然,如果两者都是 NaN,那么它也将是 NaN。

我被第二个条件阻止了。到目前为止,我只想到

pRV = pR.add(pV, fill_value=0)

然后我除以 2,但是当只添加一个值时就会出现问题,因为它也会除以它......知道如何解决这个问题吗?

最佳答案

首先连接 2 个 DF,然后按所有索引进行分组。最后取每个键的平均值。

pd.concat([pR,pV]).groupby(level=[0,1]).mean()

关于python - 如何在缺失值 NaN 的条件下将两个数据帧(相同索引)中的值平均到一个 df 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43867385/

相关文章:

python - 有趣的 'takes exactly 1 argument (2 given)' Python 错误

python - Pandas SparseDtype 不适用于 GroupBy

python - 寻找只能保存特定值的数据类型

python - 无法运行 zip 文件 : “can' t find '__main__' module”

python - 根据年份和儒略日在 pandas 中创建日期时间

python - 非常大的矩阵上的 Pandas 交叉表?

python - python中的时间序列分解错误

python - 代码优化/减少运行时间

python - tensorflow 训练感知器中的 nan 成本

python - 如何在不使用 "for"循环的情况下遍历 Python 中的列表?