Панды серии с разной длиной

1

Используя функцию pandas concat, можно создать такую серию:

In[230]pd.concat({'One':pd.Series(range(3)), 'Two':pd.Series(range(4))})
Out[230]: 
One  0    0
     1    1
     2    2
Two  0    0
     1    1
     2    2
     3    3
dtype: int64

Можно ли сделать то же самое без использования метода concat? Мой лучший подход:

a = pd.Series(range(3),range(3))
b = pd.Series(range(4),range(4))
pd.Series([a,b],index=['One','Two'])

Но это не то же самое, он выводит:

One    0    0
       1    1
       2    2
dtype: int64

Two    0    0
       1    1
       2    2
       3    3
dtype: int64
dtype: object
Теги:
pandas
python-3.x

3 ответа

-1
Лучший ответ

Это прекрасно работает:

data = list(range(3)) + list(range(4))
index = MultiIndex(levels=[['One', 'Two'], [0, 1, 2, 3]],
                   labels=[[0, 0, 0, 1, 1, 1, 1], [0, 1, 2, 0, 1, 2, 3]])
pd.Series(data,index=index)
  • 0
    Разве это не все жестко? Я не думаю, что это лучше, чем два других ответа.
1

Это должно дать вам представление о том, насколько полезен concat.

a.index = pd.MultiIndex.from_tuples([('One', v) for v in a.index])
b.index = pd.MultiIndex.from_tuples([('Two', v) for v in b.index])

a.append(b)

One  0    0
     1    1
     2    2
Two  0    0
     1    1
     2    2
     3    3
dtype: int64

То же самое достигается с помощью pd.concat([a, b]).

  • 0
    Для целей тестирования. Проснулся нормально, большое спасибо.
  • 0
    Я не читал часть не использовать Concat хаха
Показать ещё 1 комментарий
0

Это работа для keys аргументов в случае, если вы хотите получить тот же результат с помощью concat то есть:

pd.concat([a,b],keys=['One','Two'])

One  0    0
     1    1
     2    2
Two  0    0
     1    1
     2    2
     3    3
dtype: int64

Ещё вопросы

Сообщество Overcoder
Наверх
Меню