合并 Pandas 中的数据框但处理“不存在”的列

问题描述 投票:0回答:2

我有一个关于合并数据框的问题。

我创建了一个包含三个空列的数据框,名为 USD、EUR、GBP。

  group   USD   EUR   GBP
0     A  None  None  None
1     B  None  None  None
2     C  None  None  None

我现在想根据我在另一个数据框中保存的美元、欧元、英镑值填写这些列的值,例如:

  group   USD   EUR   GBP
0     A   NaN  0.05  0.04
1     B  0.04   NaN  0.03
2     C  0.02   NaN  0.01

为什么我不只是基于“组”进行合并?因为值数据框并不总是显示三列,而是显示两列,例如:

  group   USD   EUR
0     A   NaN  0.05
1     B  0.04   NaN
2     C  0.02   NaN

这里的问题是我希望在最终输出中看到所有三列,无论特定列的数据是否存在。因此,使用第三个表作为“数据表”的最终输出应如下所示:

  group   USD   EUR  GBP
0     A   NaN  0.05  NaN
1     B  0.04   NaN  NaN
2     C  0.02   NaN  NaN

您对如何解决这个问题有什么想法吗?任何帮助将不胜感激

python pandas merge
2个回答
0
投票

根据您的问题,您似乎可能只是想将

how = 'outer'
加入到合并中:

import pandas as pd
import numpy as np

df_value_base = pd.DataFrame({
    'USD' : [],
    'EUR' : [],
    'GBP' : []
})
 

df_value_1 = pd.DataFrame({
    'USD' : [np.nan, .04, .02],
    'EUR' : [.05, np.nan, np.nan],
    'GBP' : [.04, .03, .01]
})

df_value_2 = pd.DataFrame({
    'USD' : [np.nan, .04, .02],
    'GBP' : [.04, .03, .01]
})

df_value_3 = pd.DataFrame({
    'EUR' : [.05, np.nan, np.nan],
    'GBP' : [.04, .03, .01]
})

df_value_base.merge(df_value_1, how = 'outer')

df_value_base.merge(df_value_2, how = 'outer')

0
投票

您可以对齐并

combine_first
:

out = (df1.set_index('group')
          .combine_first(df2.set_index('group'))
          .reset_index()
      )

merge
reindex

out = df1[['group']].merge(df2, how='left').reindex(columns=df1.columns)

输出:

# case 1
  group   USD   EUR   GBP
0     A   NaN  0.05  0.04
1     B  0.04   NaN  0.03
2     C  0.02   NaN  0.01

# case 2
  group   USD   EUR  GBP
0     A   NaN  0.05  NaN
1     B  0.04   NaN  NaN
2     C  0.02   NaN  NaN
© www.soinside.com 2019 - 2024. All rights reserved.