Pandas水平合并两个数据框架



我正在处理这样一个问题:

mydata_old
|  x  |  y   |
|-----|------|
| 1   | 10   |
| 2   | 15   |
| 3   | 12   |
| 4   | 21   |
mydata_new
|  x  |  y   |
|-----|------|
| 4   | 20   |
| 5   | 25   |
| 6   | 30   |

我想合并这两个表得到:

mydata
|  x  |  y   |
|-----|------|
| 1   | 10   |
| 2   | 15   |
| 3   | 12   |
| 4   | 20   | # x = 4 does not show up twice
| 5   | 25   |
| 6   | 30   |

我尝试了pandas.merge,但是我不能得到想要的结果。

mydata = pd.merge(mydata_new, mydata_old, how="left")

一种方法是使用外部连接(即保持两个数据框的索引)。您可以使用pd.merge(mydata_new, mydata_old, how='outer')来实现这一点,然后保持最新的数据可用。

然而,对于pandas.concat,这可能更直接。

在这里,我连接了两个数据框。注意,如果x出现在mydata_new中,我将从mydata_old中排除行。这样,当最新的数据在两个数据框架(旧的和新的)中可用时,您可以保留最新的数据。

# Concat frames and if data is available in both, keep data from mydata_new
mydata = pd.concat(
[
mydata_old.loc[~mydata_old['x'].isin(mydata_new['x'])],
mydata_new
],
axis=0)

这将打印以下内容:

最新更新