列表理解以获取包含来自 2 个独立数据帧的匹配值的行

所以我试图在一个列上匹配两个非常不同的数据帧,每个数据帧都包含字符串格式的数字。我需要一个简洁、非常快速的解决方案,所以我尝试使用字符串理解并在几天前成功,然后丢失了我的工作,我试图重新创建它。


df1=pd.DataFrame({'col':['hey','hi','how ya durn']})

df2=pd.DataFrame({'col':['hey','hi','hello','what']})


df3=df2[[x for x in df2.col for y in df1.col if x in y]]

df3.head()

所以我前几天用 2 个数据帧完成了这项工作,都是 20-30 列,约 100k 行,除了每列 1 列之外的不同列数据,我试图匹配它。我要么得到 ValueError:Item wrong length # instead of #.要么花费大量时间,因为我使用的系统很慢。


我知道我需要使用列表理解或更快的东西,而且我知道.apply()需要太长时间。我的两个匹配列都包含字符串格式的 10-15 长度数字。几天前,当我使用类似的列表组合单行代码让它工作时,它花了几秒钟的时间才能完成,并且非常完美,现在我丢失了它并且无法重新创建它,哈哈。任何帮助是极大的赞赏。


any()(附注:我可能在列表比较中使用了一个语句,并且我 95% 确定我使用了if x in y。)


蓝山帝景
浏览 91回答 1
1回答

牧羊人nacy

您可以使用以下命令在两列中查找字符串df2[df2.col.isin(df1.col)]出去:   col0  hey1   hi一个具有理解性的解决方案是df2[df2.col.isin([x for x in df2.col for y in df1.col if x in y])]但是对于较大的列来说这会变慢
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python