Pandas 结合 2 个数据框并覆盖值

Posted

技术标签:

【中文标题】Pandas 结合 2 个数据框并覆盖值【英文标题】:Pandas combine 2 Dataframes and overwrite values 【发布时间】:2018-02-07 17:57:24 【问题描述】:

我研究了 pandas join、merge、concat 与不同的参数值(如何加入、索引、axis=1 等),但没有解决它!

我有两个数据框:

x = pd.DataFrame(np.random.randn(4,4))
y = pd.DataFrame(np.random.randn(4,4),columns=list(range(2,6)))


x
Out[67]: 
          0         1         2         3
0 -0.036327 -0.594224  0.469633 -0.649221
1  1.891510  0.164184 -0.010760 -0.848515
2 -0.383299  1.416787  0.719434  0.025509
3  0.097420 -0.868072 -0.591106 -0.672628

y
Out[68]: 
          2         3         4         5
0 -0.328402 -0.001436 -1.339613 -0.721508
1  0.408685  1.986148  0.176883  0.146694
2 -0.638341  0.018629 -0.319985 -1.832628
3  0.125003  1.134909  0.500017  0.319324

我想合并到一个数据框,其中第 2 列和第 3 列中 y 的值覆盖 x 的值,然后在末尾插入第 4 列和第 5 列:

new
Out[100]: 
          0         1         2         3         4         5
0 -0.036327 -0.594224 -0.328402 -0.001436 -1.339613 -0.721508
1  1.891510  0.164184  0.408685  1.986148  0.176883  0.146694
2 -0.383299  1.416787 -0.638341  0.018629 -0.319985 -1.832628
3  0.097420 -0.868072  0.125003  1.134909  0.500017  0.319324

【问题讨论】:

【参考方案1】:

你可以试试combine_first:

df = y.combine_first(x)

【讨论】:

【参考方案2】:

你需要updatecombine_first

x.update(y)
x.combine_first(y)
Out[1417]: 
          0         1         2         3         4         5
0 -1.075266  1.044069 -0.423888  0.247130  0.008867  2.058995
1  0.122782 -0.444159  1.528181  0.595939  0.155170  1.693578
2 -0.825819  0.395140 -0.171900 -0.161182 -2.016067  0.223774
3 -0.009081 -0.148430 -0.028605  0.092074  1.355105 -0.003027

或者你使用 pd.concat + intersection

pd.concat([x.drop(x.columns.intersection(y.columns),1),y],1)
Out[1432]: 
          0         1         2         3         4         5
0 -1.075266  1.044069 -0.423888  0.247130  0.008867  2.058995
1  0.122782 -0.444159  1.528181  0.595939  0.155170  1.693578
2 -0.825819  0.395140 -0.171900 -0.161182 -2.016067  0.223774
3 -0.009081 -0.148430 -0.028605  0.092074  1.355105 -0.003027

【讨论】:

@jp_data_analysis 第 2 列和第 3 列中 y 的值覆盖 您可以查看pandas.pydata.org/pandas-docs/stable/generated/…中的示例 但根据您的链接,y.combine_first(x) 肯定优先于y?我已经测试过了,它似乎可以工作。 @jp_data_analysis 是的,但我使用的是 x.combine_first(y),这就是我需要更新的原因 同意,我明白了。我想品种很好:)。我们的两种解决方案都有效。 @pynewbie yw:-)

以上是关于Pandas 结合 2 个数据框并覆盖值的主要内容,如果未能解决你的问题,请参考以下文章

如何在索引 2 处向 pandas 数据帧添加额外的行而不覆盖现有索引

如何格式化熊猫数据框并保留原始浮点精度值

将实际数据覆盖在来自 pandas 数据框的箱线图上

结合python覆盖文件?

如何使用比较多个数据框并使用熊猫返回匹配项

Pandas:将 DataFrame 与嵌套数组结合或合并 JSON 输出