【问题标题】:How can I join two dataframes with update in some rows, using Pandas?如何使用 Pandas 在某些行中加入两个更新数据框?
【发布时间】:2020-05-22 19:38:09
【问题描述】:

我是 pandas 的新手,我想知道如何加入两个文件并更新现有行,同时考虑到一个特定的列。这些文件有数千行。例如:

  • Df_1:

    A  B  C  D 
    1  2  5  4 
    2  2  6  8  
    9  2  2  1  
    

现在,我的表 2 具有完全相同的列,我想加入这两个表以替换可能在该表和表 1 中但在 C 列中发生更改/更新的一些行,并添加第二个表 (df_2) 中存在的新行,例如:

  • Df_2:

    A  B  C  D 
    2  2  7  8  
    9  2  3  1
    3  4  6  7
    1  2  3  4  
    

所以,我想要的结果是两个表的并集以及它们在几行中的更新,在特定的列中,如下所示:

  • Df_result:

    A  B  C  D 
    1  2  5  4 
    2  2  7  8  
    9  2  3  1  
    3  4  6  7
    1  2  3  4
    

如何使用合并或连接功能做到这一点?还是有其他方法可以得到我想要的结果?

谢谢!

【问题讨论】:

标签: python pandas


【解决方案1】:

您需要至少有一列作为参考,我的意思是,要知道需要更改哪些内容才能进行更新。

假设在您的情况下它是“A”和“B”。

import pandas as pd
ref = ['A','B']
df_result = pd.concat([df_1, df_2], ignore_index = True)
df_result = df_result.drop_duplicates(subset=ref, keep='last')

这是一个真实的例子。

d = {'col1': [1, 2, 3], 'col2': ["a", "b", "c"], 'col3': ["aa", "bb", "cc"]}
df1 = pd.DataFrame(data=d)
d = {'col1': [1, 4, 5], 'col2': ["a", "d", "f"], 'col3': ["dd","ee", "ff"]}
df2 = pd.DataFrame(data=d)

df_result = pd.concat([df1, df2], ignore_index=True)

df_result = df_result.drop_duplicates(subset=['col1','col2'], keep='last')
df_result

【讨论】:

  • 非常感谢 Rafeal!你的回答很有用。
猜你喜欢
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 2019-09-28
  • 2019-03-05
  • 2018-08-10
  • 2019-01-30
  • 1970-01-01
相关资源
最近更新 更多