【问题标题】:Two dataframes into one两个数据帧合二为一
【发布时间】:2016-08-13 21:40:39
【问题描述】:

我不确定这是否可能。我有两个数据框 df1 和 df2,如下所示:

df1             df2             

id value        id value      
 a     5         a   3         
 c     9         b   7         
 d     4         c   6         
 f     2         d   8         
                 e   2         
                 f   1         

他们在现实中的参赛作品比这里展示的要多得多。我想根据 df1 和 df2 中的值创建第三个数据框 df3。写入 df3 时,df1 中的任何值都将优先于 df2 中的值(如果 df1 和 df2 中存在相同的 id),因此在此示例中我将返回:

df3
id value
a      5
b      7
c      9
d      4 
e      2
f      2

我尝试使用 df2 作为基础(df2 将包含整个宇宙的所有 id),然后覆盖 df1 中存在的 id 的值,但找不到执行此操作的合并语法。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用combine_first,前提是您首先将DataFrame 索引设为id(以便values 与id 对齐):

    In [80]: df1.set_index('id').combine_first(df2.set_index('id')).reset_index()
    Out[80]: 
      id  value
    0  a    5.0
    1  b    7.0
    2  c    9.0
    3  d    4.0
    4  e    2.0
    5  f    2.0
    

    既然您提到了合并,您可能有兴趣看到 您可以在id 上合并df1 和df2,然后使用fillna 将df1 的value 列中的NaN 替换为df2 的值列中的值:

    df1 = pd.DataFrame({'id': ['a', 'c', 'd', 'f'], 'value': [5, 9, 4, 2]})
    df2 = pd.DataFrame({'id': ['a', 'b', 'c', 'd', 'e', 'f'], 'value': [3, 7, 6, 8, 2, 1]})
    result = pd.merge(df2, df1, on='id', how='left', suffixes=('_x', ''))
    result['value'] = result['value'].fillna(result['value_x'])
    result = result[['id', 'value']]
    print(result)
    

    产生相同的结果,但第一种方法更简单。

    【讨论】:

      猜你喜欢
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2014-09-04
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多