我正在处理这样一个问题:
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)
这将打印以下内容: