Панды: выращивание серии назад, используя скорость роста другой серии - PullRequest
0 голосов
/ 12 сентября 2018

У меня отсутствуют данные в начале DataFrame для одной серии, и я хочу заполнить эти NA, увеличивая ряд, используя скорость роста другой.

df = pd.DataFrame({'X':[np.nan, np.nan, np.nan, 6, 6.7, 6.78, 7, 9.1], 
                   'Y':[5.4, 5.7, 5.5, 6.1, 6.5, 6.80, 7.1, 9.12]})

      X     Y
0   NaN  5.40
1   NaN  5.70
2   NaN  5.50
3  6.00  6.10
4  6.70  6.50
5  6.78  6.80
6  7.00  7.10
7  9.10  9.12

т.е. что я хочу это:

df2 = pd.DataFrame({'X':[5.31147, 5.60656, 5.40984, 6, 6.7, 6.78, 7, 9.1], 
                   'Y':[5.4, 5.7, 5.5, 6.1, 6.5, 6.80, 7.1, 9.12]})

Так что две серии имеют одинаковые темпы роста для первых нескольких пропущенных значений

df2.pct_change()

          X         Y
0       NaN       NaN
1  0.055556  0.055556
2 -0.035088 -0.035088
3  0.109091  0.109091
4  0.116667  0.065574
5  0.011940  0.046154
6  0.032448  0.044118
7  0.300000  0.284507

Есть идеи? Я выяснил, как выполнить итерацию назад и сохранить вывод в список, но предварительно ожидая, что он громоздкий, и мне нужно добавить его к исходному DataFrame

1 Ответ

0 голосов
/ 12 сентября 2018

Вы могли бы позволить

first_non_nan = df.X.isnull().idxmin()
changes = df.Y[:first_non_nan+1].pct_change()
while first_non_nan > 0:
    df.X[first_non_nan-1] = df.X[first_non_nan]/(changes[first_non_nan]+1)
    first_non_nan -= 1

Результат:

In [48]: df
Out[48]:
          X     Y
0  5.311475  5.40
1  5.606557  5.70
2  5.409836  5.50
3  6.000000  6.10
4  6.700000  6.50
5  6.780000  6.80
6  7.000000  7.10
7  9.100000  9.12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...