Home > OS >  Interpolating in mulitiindex pandas
Interpolating in mulitiindex pandas

Time:03-27

I have data which looks like this:

month  day
1      1            NaN
       2            NaN
       3      39.529999
       4      40.570000
       5      40.099998
                ...    
12     27           NaN
       28           NaN
       29           NaN
       30           NaN
       31     39.049999



df55.iloc[df55.index.get_level_values('month') == 3]

month  day
3      1      37.099998
       2      38.060001
       3      37.939999
       4      37.230000
       5            NaN
       6            NaN
       7      35.869999
       8      35.660000
       9      36.970001
       10     36.660000
       11     36.400002
       12           NaN
       13           NaN
       14     36.860001
       15     37.380001
       16     38.430000
       17     38.910000
       18     39.000000
       19           NaN
       20           NaN
       21     38.810001
       22     39.439999
       23     38.709999
       24     39.020000
       25     39.520000
       26           NaN
       27           NaN
       28           NaN
       29           NaN
       30           NaN
       31           NaN

I want to interpolate() the missing data but only till today, which is month 3 and day 26 from month 1 day 1 and leave all the other NaN as is. Could you please advise how can data between the range to interpolate()

CodePudding user response:

It seems easiest to temporarily reset the index so you can use a query:

today = pd.to_datetime('today')
idx = df.reset_index().query('month in [1,2] or (month == @today.month and day < @today.day)').index.max()
df.iloc[:idx] = df.iloc[:idx].interpolate()

Now all values from 1-1 (inclusive) to 3-25 (inclusive) will be non-NaN.

CodePudding user response:

Your idea between is iloc is good but you can use dayofyear to slice your dataframe because I guess your dataframe is well ordered.

today = pd.to_datetime('today')
df.iloc[:today.dayofyear] = df.iloc[:today.dayofyear].interpolate()
  • Related