我正在try 合并两个数据帧,并创建一个新的数据帧,其中只包含第一个数据帧中不存在的行.例如:
作为输入的数据帧:
我想要作为输出的数据帧:
你知道有没有办法做到这一点吗?如果你能帮助我,我将不胜感激!!谢谢,Eleni
我正在try 合并两个数据帧,并创建一个新的数据帧,其中只包含第一个数据帧中不存在的行.例如:
作为输入的数据帧:
我想要作为输出的数据帧:
你知道有没有办法做到这一点吗?如果你能帮助我,我将不胜感激!!谢谢,Eleni
创建一些数据时,我们有两个数据帧:
import pandas as pd
import numpy as np
rng = np.random.default_rng(seed=5)
df1 = pd.DataFrame(data=rng.integers(0, 5, size=(5, 2)))
df2 = pd.DataFrame(data=rng.integers(0, 5, size=(5, 2)))
# df1
a b
0 3 4
1 0 4
2 2 2
3 3 1
4 4 0
# df2
a b
0 1 1
1 2 2
2 0 0
3 0 0
4 0 4
我们可以用pandas.merge
来组合相等的行.我们可以使用它的indicator=True
特性来标记那些仅从左侧(和右侧,如果适用)开始的行.因为我们只需要左边唯一的那个些,所以我们可以使用how="left"
进行合并以提高效率.
dfm = pd.merge(df1, df2, on=list(df1.columns), how="left", indicator=True)
# dfm
a b _merge
0 3 4 left_only
1 0 4 both
2 2 2 both
3 3 1 left_only
4 4 0 left_only
很好,那么最终的结果就是使用合并
(dfm.loc[dfm._merge == 'left_only']
.drop(columns=['_merge']))
a b
0 3 4
3 3 1
4 4 0
If您希望通过列的子集进行重复数据消除,这应该是可能的.在这种情况下,我会这样合并它,重复子集,这样我们就不会从左侧和右侧得到重复版本的其他列.
pd.merge(df1, df2[subset], on=subset, how="left", indicator=True)