替换列并扩展DataFrame中的索引

时间:2018-10-30 11:50:49

标签: python pandas dataframe

我有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 :(得分:2)

combine_first

首先用yDataFrame变成to_frame

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

   C1   C2
a   5  2.0
b   6  4.0
c   7  NaN

alignassign

使用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

答案 1 :(得分:1)

类似于您的解决方案,但更简洁,您先使用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

答案 2 :(得分:1)

您的猫尝试使用join:

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

输出:

   C1  C2
a   5  2.0
b   6  4.0
c   7  NaN 

答案 3 :(得分:0)

您可以使用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