比较 2 个不同表列的有效方法
Posted
技术标签:
【中文标题】比较 2 个不同表列的有效方法【英文标题】:Efficient method comparing 2 different tables columns 【发布时间】:2021-01-14 01:47:00 【问题描述】:大家好,
我有 2 个 dfs,我需要检查第一个中的值是否与第二个匹配,仅针对每个特定列,并将匹配的值保存在新列表中。这就是我所做的,但这需要花费很多时间,如果有更有效的方法,我正在徘徊。这些列表就像上图中的 2 个不同表格一样。
for x in df_bd_names['Building_Name']:
for y in df_sup['Source_String']:
if x == y:
matching_words_sup.append(x)
谢谢
【问题讨论】:
由于您在熊猫中工作,我会避免循环遍历数据帧的每一行。我会将其设为内部连接(使用pd.merge
)。这将输出 2 个数据帧之间的所有公共行。
嗨@anddt,感谢您的回复。你知道我是否可以将第一个表中的一列与第二个表中的一列合并,因为 2 个 dfs 在结构上不同,我只比较每个列。
【参考方案1】:
def __init__(self, df1, df2):
self.df1 = df1
self.df2 = df2
def compareDFsEffectively(self):
np1 = self.df1.to_numpy()
np2 = self.df2.to_numpy()
np_new = np.intersect1d(np1,np2)
print(np_new)
df_new = pd.DataFrame(np_new)
print(df_new)
【讨论】:
Numpy 数组速度相当快,可以快速生成结果。【参考方案2】:让我们创建两个数据框:
df1 = pd.DataFrame(
'Building_Name': ['Exces', 'Excs', 'Exec', 'Executer', 'Executor']
)
df2 = pd.DataFrame(
'Source_String': ['Executer', 'Executor', 'Executor Of', 'Executor For', 'Exeutor']
)
在数据框之间执行内部合并并将第一列转换为列表:
pd.merge(df1, df2, left_on='Building_Name', right_on='Source_String', how='inner')['Building_Name'].tolist()
输出:
['Executer', 'Executor']
【讨论】:
非常感谢,它运行良好,效率更高以上是关于比较 2 个不同表列的有效方法的主要内容,如果未能解决你的问题,请参考以下文章