我有一个关于合并数据框的问题。
我创建了一个包含三个空列的数据框,名为 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
您对如何解决这个问题有什么想法吗?任何帮助将不胜感激
根据您的问题,您似乎可能只是想将
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')
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