Pandas水平合并两个 Dataframe

9jyewag0  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(193)

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

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")
0yycz8jy

0yycz8jy1#

实现这一点的一种方法是使用外部连接(即,保留两个 Dataframe 的索引)。您可以使用pd.merge(mydata_new, mydata_old, how='outer')来实现这一点,然后保持最新数据可用。
但是,使用pandas.concat可以更直接。
在这里,我连接了两个 Dataframe 。注意,如果x出现在mydata_new中,我将排除mydata_old中的行。这样,当最新的数据在两个 Dataframe (旧的和新的)中都可用时,您可以保留它。

# 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)

这将打印以下内容:
| X射线|Y形|
| - -|- -|
| 一个|10个|
| 2个|十五|
| 三个|十二|
| 四个|二十个|
| 五个|二十五个|
| 六个|三十|

相关问题