Python 使用气候学数据(当年除外)填写缺失值

Python 使用气候学数据(当年除外)填写缺失值,python,pandas,Python,Pandas,我用气候学的中值来填充数据框中缺失的值。日期范围为2010年1月1日至2016年12月31日。但是,我只想填写当前日期(比如2016年10月1日)前几天的缺失值。如何修改语句?使用np。其中,示例: df.groupby([df.index.month, df.index.day])[vars_rs].transform(lambda y: y.fillna(y.median())) 修改的数据帧: import pandas as pd import numpy as np df = pd.

我用气候学的中值来填充数据框中缺失的值。日期范围为2010年1月1日至2016年12月31日。但是,我只想填写当前日期(比如2016年10月1日)前几天的缺失值。如何修改语句?

使用
np。其中
,示例:

df.groupby([df.index.month, df.index.day])[vars_rs].transform(lambda y: y.fillna(y.median()))
修改的数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A':['a','a','b','b','c','c'],'B':[1,2,3,4,5,6],'C':[1,np.nan,np.nan,np.nan,np.nan,np.nan]})
df.ix[:,'C'] = np.where((df.A != 'c')&(df.B < 4)&(pd.isnull(df.C)),-99,df.ix[:,'C'])
   A  B    C
0  a  1  1.0
1  a  2  NaN
2  b  3  NaN
3  b  4  NaN
4  c  5  NaN
5  c  6  NaN

使用
np。其中
,示例:

df.groupby([df.index.month, df.index.day])[vars_rs].transform(lambda y: y.fillna(y.median()))
修改的数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A':['a','a','b','b','c','c'],'B':[1,2,3,4,5,6],'C':[1,np.nan,np.nan,np.nan,np.nan,np.nan]})
df.ix[:,'C'] = np.where((df.A != 'c')&(df.B < 4)&(pd.isnull(df.C)),-99,df.ix[:,'C'])
   A  B    C
0  a  1  1.0
1  a  2  NaN
2  b  3  NaN
3  b  4  NaN
4  c  5  NaN
5  c  6  NaN

算法是:

  • 获取数据框的一部分,该部分仅包含按日期过滤的行,并带有布尔掩码
  • 对其执行所需的替换
  • 将初始数据帧的其余部分追加到结果数据帧的末尾
  • 虚拟数据:

       A  B     C
    0  a  1   1.0
    1  a  2 -99.0
    2  b  3 -99.0
    3  b  4   NaN
    4  c  5   NaN
    5  c  6   NaN
    
    代码

    df = pd.DataFrame(np.zeros((5, 2)),columns=['A', 'B'],index=pd.date_range('2000',periods=5,freq='M'))
    
                A   B
    2000-01-31  0.0 0.0
    2000-02-29  0.0 0.0
    2000-03-31  0.0 0.0
    2000-04-30  0.0 0.0
    2000-05-31  0.0 0.0
    

    算法是:

  • 获取数据框的一部分,该部分仅包含按日期过滤的行,并带有布尔掩码
  • 对其执行所需的替换
  • 将初始数据帧的其余部分追加到结果数据帧的末尾
  • 虚拟数据:

       A  B     C
    0  a  1   1.0
    1  a  2 -99.0
    2  b  3 -99.0
    3  b  4   NaN
    4  c  5   NaN
    5  c  6   NaN
    
    代码

    df = pd.DataFrame(np.zeros((5, 2)),columns=['A', 'B'],index=pd.date_range('2000',periods=5,freq='M'))
    
                A   B
    2000-01-31  0.0 0.0
    2000-02-29  0.0 0.0
    2000-03-31  0.0 0.0
    2000-04-30  0.0 0.0
    2000-05-31  0.0 0.0