У меня есть Pandas DataFrame значений для каждого месяца;каждый столбец представляет собой отдельную временную серию, но они начинаются в разные месяцы.Значения NaN
перед началом каждой серии.
df = pd.DataFrame({
'a': [np.nan, np.nan, 1, 2, 3, 4],
'b': [2, 4, 6, 8, 10, 12],
'c': [np.nan, -1, -2, -3, np.nan, -5]},
index=pd.date_range('2018-01', '2018-06', freq='MS')
)
a b c
2018-01-01 NaN 2 NaN
2018-02-01 NaN 4 -1.0
2018-03-01 1.0 6 -2.0
2018-04-01 2.0 8 -3.0
2018-05-01 3.0 10 NaN
2018-06-01 4.0 12 -5.0
Я хотел бы преобразовать этот фрейм данных так, чтобы для каждого столбца первое ненулевое значение находилось в первой строке, а NaN
s в конце.
Вот моя лучшая попытка:
df.reset_index(drop=True).apply(lambda c: c.shift(-c.first_valid_index()))
a b c
0 1.0 2 -1.0
1 2.0 4 -2.0
2 3.0 6 -3.0
3 4.0 8 NaN
4 NaN 10 -5.0
5 NaN 12 NaN
Есть ли встроенный или более естественный способ сделать это в Пандах?У этой операции есть имя?