Интерпорация нескольких столбцов в кадре данных - PullRequest
1 голос
/ 04 марта 2020

У меня есть фрейм данных с несколькими столбцами

df = pd.DataFrame({
'Date': [1930, 1931, 1932, 1933,1934],
'File1': [np.nan, 72, 58, 280, 958],
'File2': [22, np.nan, np.nan, np.nan, 13],
'File3': [np.nan, np.nan, np.nan, 18, 137],
'File4': [np.nan, 552, 1377, 280, np.nan],
'File5': [45, 1252, np.nan, 1841, np.nan],
}) 

Я хочу выполнить интерполяцию для всего фрейма данных (например, используя FillMean). Однако файлы имеют разные даты начала и окончания. Поэтому мне нужно сказать интерполировать (используя FillMean) между первым значением и последним значением этого файла (он не должен интерполироваться до даты начала (первое значение в файле) или после даты окончания (последнее значение в файле)

Например, для:

  • файл 1, интерполяция не должна выполняться, поскольку после даты начала нет пропущенных значений.
  • Файл 2, там должна быть интерполяция являются пустыми значениями между начальной и конечной датами
    И так далее ...

ожидаемый результат

   Date  File1  File2  File3   File4   File5
0  1930    NaN  22.00    NaN   280.0    45.0
1  1931   72.0  19.75    NaN   552.0  1252.0
2  1932   58.0  17.50    NaN  1377.0  1546.5
3  1933  280.0  15.25   18.0   280.0  1841.0
4  1934  958.0  13.00  137.0     NaN     NaN

1 Ответ

0 голосов
/ 04 марта 2020

Используйте DataFrame.interpolate с параметром limit_are='inside':

df = df.interpolate(limit_are='inside').mask(df.bfill().isna())
print (df)
   Date  File1  File2  File3   File4   File5
0  1930    NaN  22.00    NaN     NaN    45.0
1  1931   72.0  19.75    NaN   552.0  1252.0
2  1932   58.0  17.50    NaN  1377.0  1546.5
3  1933  280.0  15.25   18.0   280.0  1841.0
4  1934  958.0  13.00  137.0     NaN     NaN
...