2016-08-03 2 views
0

Это оказалось нетривиальной для меня, так что я хотел, чтобы проверить, если у других есть простое решение для этого:Панды: серия накладка на верхней или нижней

Пусть у меня есть произвольное число (скажем, 3) pd.Series: который выглядит следующим образом:

first = pd.Series(range(5)) 
second = pd.Series(range(7)) 
third = pd.Series(range(6)) 

Я хотел бы сделать их все те же длины (7 - которая является крупнейшей длиной) и блокнот более коротким с np.nan с либо в верхней (возможно в снизу), чтобы он выглядел так:

nan 
nan 
    0 
    1 
    2 
    3 
    4 

и так далее.

ответ

0

Вы можете использовать reindex, чтобы дать каждой серии новый индекс. Если новый индекс содержит метки, которые не находятся в индексе оригинальной серии, то значение NaN заполняется (если иное fill_value не указано):

In [15]: first.reindex(range(7)) 
Out[15]: 
0 0.0 
1 1.0 
2 2.0 
3 3.0 
4 4.0 
5 NaN 
6 NaN 
dtype: float64 

Вы можете контролировать размещение в NaNs по вашему выбору из переиндексации этикеток:

In [19]: first.reindex(range(-2,5)) 
Out[19]: 
-2 NaN 
-1 NaN 
0 0.0 
1 1.0 
2 2.0 
3 3.0 
4 4.0 
dtype: float64 

Обратите внимание, что включение NaN с вынуждает DTYPE из first быть повышен с целочисленным DTYPE с плавающей точкой DTYPE так NaN с являются поплавки (и, следовательно, серии целочисленного DTYPE не может содержат NaN с).

+0

Спасибо. У меня была догадка, но я не смог это исправить. Мне нужно подождать некоторое время, прежде чем принять ответ. – asb

Смежные вопросы