【问题标题】:Pandas merge horizzontalyPandas 水平合并
【发布时间】:2022-12-18 07:55:33
【问题描述】:

我正在处理这样的问题:

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   |
| 5   | 25   |
| 6   | 30   |

我尝试了合并功能

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

和其他组合,但我无法获得所需的结果

【问题讨论】:

  • pd.concat([mydata_old, mydata_new])

标签: python pandas merge


【解决方案1】:

一种方法是使用外部连接(即保留来自两个数据帧的索引)。您可以使用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)

这将打印以下内容:

x y
1 10
2 15
3 12
4 20
5 25
6 30

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多