我有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
有没有更简单的方法?
答案 0 :(得分:2)
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
答案 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