Pandas DataFrame переиндексирует до ближайшего - PullRequest
0 голосов
/ 16 октября 2018

Ниже я добавил случай "Неоднородная выборка столбцов".

Выборка равномерной столбца

Представьте себе следующий набор данных:

         x    y
t              
0.010  1.0  NaN
0.015  NaN  5.0
0.022  3.0  NaN
0.023  NaN  4.0
0.031  5.0  NaN
0.032  NaN  7.0

Цельэто переиндексировать эти данные для общего интервала выборки и связать ближайшие точки выборки.А именно, возвращаемое значение:

         x    y
t              
0.01  1.0  5.0
0.02  3.0  4.0
0.03  5.0  7.0

Я пытаюсь это сделать, используя метод DataFrame.reindex для панд.Тем не менее, это не похоже на работу.Вот пример:

import pandas as pd
import numpy as np

data_dict = {'t':[0.01  , 0.015 , 0.022 , 0.023 , 0.031 , 0.032],
             'x':[   1  , np.nan, 3     , np.nan, 5     , np.nan],
             'y':[np.nan, 5     , np.nan, 4     , np.nan, 7] }
df = pd.DataFrame(data_dict)
df.set_index('t', inplace=True)
df.reindex([0.01, 0.02, 0.03], method='nearest', tolerance=0.01)

Результат:

        x   y
t            
0.01  1.0 NaN
0.02  3.0 NaN
0.03  5.0 NaN

Мои вопросы:

  1. Это предполагаемый вариант использования для reindex method
  2. Как этого достичь?

Неоднородный отбор проб столбцов

Представьте себе этот набор данных:

         x    y
t              
0.010  1.0  NaN
0.022  3.0  NaN
0.023  NaN  5.0
0.031  5.0  NaN
0.039  NaN  7.0
0.041  4.0  NaN

В этом случае частота выборки для столбцов действительно различна, но мы хотели бы переиндексировать их в общий временной масштаб.Как можно применить reindex , чтобы получить следующее:

         x    y
t              
0.010  1.0  NaN
0.020  3.0  5.0
0.030  5.0  NaN
0.040  4.0  7.0

Те же два вопроса.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вы можете сделать переиндексацию для каждого столбца, предварительно отбросив NaN, а затем просто соединить части вместе:

t = [0.01, 0.02, 0.03]
df2 = pd.concat(
    map(lambda c: df[c].dropna().reindex(t, method='nearest', tolerance=0.01),
        df.columns),
    axis=1
)
0 голосов
/ 16 октября 2018

Проблема в том, что значения NaN являются ближайшими совпадениями в столбце y, поэтому он выбирает их.Вы можете сначала выполнить интерполяцию, чтобы заполнить значения NaN соответствующим образом, а затем переиндексировать.

df.interpolate(method='nearest').ffill().bfill().reindex([0.01, 0.02, 0.03], method='nearest')

        x    y
t             
0.01  1.0  5.0
0.02  3.0  4.0
0.03  5.0  7.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...