如何将两个数据帧(相同索引)的值平均为一个df,条件为缺失值NaN?

时间:2017-05-09 10:29:31

标签: 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 =本地化的admincode,年份的level1),列是年度的dekads。

我需要通过

将它们组合成一个数据帧
  • 平均对应于相同索引位置的2个值,仅当值都是数字时才
  • 否则(如果两个中的一个缺失/ NaN),最终值应该是不丢失的值(例如:1981年至2002年,只有降雨量值)。
  • 当然如果两者都是NaN,它也会是NaN。

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

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

然后我除以2但是当只添加一个值时它就是一个问题,因为它也会将它除掉......任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

IIUC,我认为你需要这个:

pd.concat((pRV,pv)).groupby(level=[0,1]).mean()