Заменить столбец и расширить индекс в DataFrame - PullRequest
0 голосов
/ 30 октября 2018

У меня есть DataFrame x , и я хотел бы заменить один столбец на Series y

x = DataFrame([[1,2],[3,4]], columns=['C1','C2'], index=['a','b'])

   C1  C2
a   1   2
b   3   4

y = Series([5,6,7], index=['a','b','c'])

a    5
b    6
c    7

Простая замена работает нормально, но сохраняет оригинальный индекс DataFrame

x['C1'] = y

   C1  C2
a   5   2
b   6   4

Мне нужно объединение индексов x и y . Одним из решений было бы переиндексировать перед заменой

x = x.reindex(x.index.union(y.index), copy=False)
x['C1'] = y

   C1   C2
a   5  2.0
b   6  4.0
c   7  NaN

Есть ли более простой способ?

Ответы [ 4 ]

0 голосов
/ 30 октября 2018

combine_first

Превратите y в DataFrame сначала с to_frame

y.to_frame('C1').combine_first(x)

   C1   C2
a   5  2.0
b   6  4.0
c   7  NaN

align и assign

Используйте align, чтобы ... выровнять индексы

x, y = x.align(y, axis=0)

x.assign(C1=y)

   C1   C2
a   5  2.0
b   6  4.0
c   7  NaN
0 голосов
/ 30 октября 2018

Аналогично вашему решению, но более кратко, вы используете reindex, затем assign:

res = x.reindex(x.index | y.index).assign(C1=y)

print(res)

   C1   C2
a   5  2.0
b   6  4.0
c   7  NaN
0 голосов
/ 30 октября 2018

Ваша кошка, попробуйте использовать join:

pd.DataFrame(y,columns=['C1']).join(x[['C2']])

Выход:

   C1  C2
a   5  2.0
b   6  4.0
c   7  NaN 
0 голосов
/ 30 октября 2018

Вы можете использовать concat, но вам нужно будет исправить имена столбцов, т.е.

import pandas as pd
pd.concat([x.loc[:, 'C2'], y], axis = 1)

что дает,

    C2  0
a  2.0  5
b  4.0  6
c  NaN  7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...