Панды: ряд прокладок сверху или снизу

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

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

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

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

nan
nan
  0
  1
  2
  3
  4

и так далее.

1 ответ

Решение

Вы могли бы использовать 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

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

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 s заставляет dtype first повышаться от целочисленного dtype до dtype с плавающей точкой, так как NaN s являются числами с плавающей точкой (и, следовательно, серия целых чисел dtype не может содержать NaN с).

Другие вопросы по тегам