【问题标题】:Adding new and already existing data from multiple dataframes into a singular dataframe? [duplicate]将来自多个数据帧的新数据和现有数据添加到单个数据帧中? [复制]
【发布时间】:2022-01-25 04:18:27
【问题描述】:

假设我有一个main df1

Name: ID ID2 score
Michael 1 01 100
Robert 12 012 80
William 123 65
Jul 01234 87

然后我想添加df2

Name: ID ID2 score
Jul 1234 01234 87
William 123 0123 80
Steven 12345 012345 99

因此,如果df1 是我的main 数据框,我想将新值从df2 添加到df1。在df1name 的值是新的情况下,我希望它添加到df1 的底部,并且在name 的值确实存在于df1 的情况下,我想要当前行将被新的 df2 值覆盖,并保留在添加 df2 值之前所在的同一行中。

所以我的 final_df 应该是这样的:

Name: ID ID2 score
Michael 1 01 100
Robert 12 012 80
William 123 0123 80
Jul 1234 01234 87
Steven 12345 012345 99

我试过了:

pd.concat([df1, df2])

  • 但这适用于我们将新数据添加到数据框中的情况,在将 df2 中的“Jul”和“William”添加到我们的 df1 的情况下,我希望它基本上覆盖 df1 中的当前数据'Jul' 和 'William' 因为这些名称值已经存在于我们的 df1 中

有更好的解决方案吗?提前谢谢你

【问题讨论】:

  • concat 将创建重复项 - 如果值不同怎么办?
  • 如果值不同但名称相同,我们希望覆盖已经存在的名称的值 - 例如 df2 中的“Jul”示例,df1 中的“Jul”存在但列没有值:“ID”,但在 df2 中,我们有此列,它是新数据,因此我们希望用新数据覆盖“Jul”。而不是像 concat 方法那样将其添加到底部。

标签: python pandas dataframe concatenation


【解决方案1】:

如果name 相同,您希望 df2 值覆盖 df1 值,您可以按名称 drop_duplicates 并保留与最后一个副本对应的行(来自 df2):

final_df = pd.concat([df1,df2]).drop_duplicates(subset="Name:",keep="last")

结果:

     Name:     ID     ID2  score
0  Michael      1      01    100
1   Robert     12     012     80
0      Jul   1234   01234     87
1  William    123    0123     80
2   Steven  12345  012345     99

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2020-09-26
    • 2019-08-20
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2020-07-26
    相关资源
    最近更新 更多