【问题标题】:Updating a python dataframe with new data from another dataframe使用来自另一个数据帧的新数据更新 python 数据帧
【发布时间】:2018-09-14 13:04:40
【问题描述】:

我正在尝试使用从不同数据帧 (df2) 接收的数据更新现有数据帧 (df1)。数据框 df2 可能有新列、新行或新数据。这是我想要完成的一个示例。

df1

    var1   var2    var3
a      8      4      12
b     -1     -4      -3
c      9     12      11
d     12     15       7
e      1      3      12
f      2      4       6

df2(请注意,这几乎与 df1 类似,只是它没有列 var1,有一个新列 var4,更新了 var3 的值,var2 相同,并且有一个新行“month s3”)。

    var2    var3    var4
a      4      10      12 
b     -4       0       4
c     12      15       9
d     15      12       5
e      3      17       7
f      4      16       8
g      0       0       4

这应该是更新的df

    var1   var2    var3    var4
a      8      4      10      12 
b     -1     -4       0       4
c      9     12      15       9
d     12     15      12       5
e      1      3      17       7
f      2      4      16       8
g      0      0       0       4

完成这项任务的最佳方法是什么? (我特别坚持添加 df2 中可能存在的任何额外行)。

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    由于两个数据帧共享索引,组合它们的最简单方法是执行外连接:

    df = df1.join(df2, how='outer', lsuffix='_l').fillna(0).astype(int)
    

    lsuffix 用足够的'_l' 标记左侧数据框中的重复列。 fillna 用零填充左侧数据框中的缺失值。最后,删除重复的列:

    df = df.loc[:,~df.columns.str.endswith('_l')]
    

    【讨论】:

    • 如果 df2 不包含 df1 中的行怎么办?例如,假设 df2 缺少行 e (3, 17, 7)。更新后的 df 仍应具有 e 行,其 var1、var2、var3 和 var4 的值分别为 1、3、12、0。
    • @arqchicago 它会有那一行。这就是外连接的用途。
    猜你喜欢
    • 2020-09-20
    • 2015-12-31
    • 2018-12-25
    • 1970-01-01
    • 2016-12-20
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多