Объединение двух серий в фрейм данных в панд
у меня есть две серии s1
и s2
с одинаковыми (не последовательными) индексами. Как мне комбинировать s1
и s2
чтобы быть двумя столбцами в фрейме данных и сохранить один из индексов в качестве третьего столбца?
6 ответов:
Я думаю
concat
хороший способ сделать это. Если они присутствуют, он использует атрибуты имени ряда в качестве столбцов (в противном случае он просто нумерует их):In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1') In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2') In [3]: pd.concat([s1, s2], axis=1) Out[3]: s1 s2 A 1 3 B 2 4 In [4]: pd.concat([s1, s2], axis=1).reset_index() Out[4]: index s1 s2 0 A 1 3 1 B 2 4
Примечание: это распространяется на более, чем 2 серии.
панды автоматически выровняют эти пройденные последовательно и создадут совместный индекс Так уж получилось, что и здесь они одинаковы.
reset_index
перемещает индекс в столбец.In [2]: s1 = Series(randn(5),index=[1,2,4,5,6]) In [4]: s2 = Series(randn(5),index=[1,2,4,5,6]) In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index() Out[8]: index s1 s2 0 1 -0.176143 0.128635 1 2 -1.286470 0.908497 2 4 -0.995881 0.528050 3 5 0.402241 0.458870 4 6 0.380457 0.072251
почему бы вам просто не использовать .to_frame, если оба имеют одинаковые индексы?
a.to_frame().join(b.to_frame())
^^ Это не будет работать, если пытаться "присоединиться" к двум сериям панд
пример кода:
a = pd.Series([1,2,3,4], index=[7,2,8,9]) b = pd.Series([5,6,7,8], index=[7,2,8,9]) data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})
панды позволяет создать
DataFrame
Сdict
СSeries
как значения и имена столбцов в качестве ключей. Когда он находитSeries
в качестве значения он использует в рамках . Это выравнивание данных является одним из основных преимуществ панд. Следовательно, если у вас нет других потребностей, то свежесозданныйDataFrame
повторяющиеся значения. В приведенном выше примереdata['idx_col']
имеет те же данные, что иdata.index
.