微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

列出理解以从包含另一个数据帧的匹配列值的数据帧中获取行

如何解决列出理解以从包含另一个数据帧的匹配列值的数据帧中获取行

所以我有2个完全不同的数据框-不同的列名和不同的数据。 两者都有一个包含一些匹配数字的列。香港专业教育学院试图使用list comp与any()语句没有成功,并且合并/联接是一团糟,而没有重命名所有内容。这是我正在做的一个小例子:

df1 = pd.DataFrame(np.random.randint(0,100,size=(5,5)),columns=list('ABCDE'))
df2 = pd.DataFrame(np.random.randint(0,columns=list('FGHIJ'))

match = [x for x in df1['B'] if any(y in x for y in df2['K'])]
df_match = df1[match]

这总是给我所有True值的输出,否则我得到一个空列表。 有点迷失了,只是试图获取df1.B与df2.K匹配的df1行,并且需要比我的海量数据集的列表理解快或快的东西。

编辑:我应该补充一下,数据框中的这些“数字”都是字符串(“ 24”)。 几周前,我解决了这个问题,然后我丢失了代码,我想起了使用带any()的列表理解使它起作用,但无法回忆起我在语法上所做的事情):

解决方法

我猜你实际上要写的是

df1 = pd.DataFrame(np.random.randint(0,2,size=(10,5)),columns=list('ABCDE'))
df2 = pd.DataFrame(np.random.randint(0,columns=list('EFGHI'))

由于我的dfs有一个共享的列,我们知道我们要寻找的共识,并且由于值是0和1,因此它们可能会不时达成共识:)。

现在

df1["E"]==df2["E"]

为您提供一系列正确和错误的值。如果dfs在e列中同意,则为true,否则为false。现在,如果您要的是行,则可以这样做 df1[df1["E"]==df2["E"]]df2[df1["E"]==df2["E"]].如果要合并df,则必须重置索引并像这样将它们加入

df1[df1["E"]==df2["E"]].reset_index(drop=True)\
.join(df2[df1["E"]==df2["E"]].reset_index(drop=True)[["F","G","H"]])

请注意,由于df2中的E列重叠,因此我必须删除它。

因为在实际问题中似乎是这种情况,所以该版本具有不同名称的列:

df1 = pd.DataFrame(np.random.randint(0,columns=list('FGHIJ'))


df1[df1["E"]==df2["E"]].reset_index(drop=True)\
.join(df2[df1["E"]==df2["F"]].reset_index(drop=True)[["G","H","I"]])

请注意,在加入[["G","I"]]之前,我已从df2中删除了列F,因为这将是多余的信息。通过选择行,列E和F必须包含完全相同的信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。