当前位置: 首页 > 面试题库 >

在python中的pandas中匹配数据框之间的行

仲孙温文
2023-03-14
问题内容

我有两个数据框

df1,

 Names
 one two three
 Sri is a good player
 Ravi is a mentor
 Kumar is a cricketer

df2,

 values
 sri
 NaN
 sri, is
 kumar,cricketer

我正在尝试在df1中获取包含df2中所有项目的行

我的预期输出是

 values             Names
 sri                Sri is a good player
 NaN
 sri, is            Sri is a good player
 kumar,cricketer    Kumar is a cricketer

我试过了, df1["Names"].str.contains("|".join(df2["values"].values.tolist()))

但是我无法达到预期的输出,因为它具有(“,”)。请帮忙


问题答案:

使用集

s1 = df1.Names.dropna()
s1.loc[:] = [set(x.lower().split()) for x in s1.values.tolist()]
a1 = s1.values

s2 = df2['values'].dropna()
s2.loc[:] = [set(x.replace(' ', '').lower().split(',')) for x in s2.values.tolist()]
a2 = s2.values

i = np.column_stack([a1 >= a2[:, None], [True] * len(a2)]).argmax(1)

df2.assign(Names=pd.Series(
    np.append(df1.Names.values, np.nan)[i], s2.index
))

            values                 Names
0              sri  Sri is a good player
1              NaN                   NaN
2          sri, is  Sri is a good player
3  kumar,cricketer  Kumar is a cricketer


 类似资料:
  • 问题内容: 我的Pandas Dataframe框架看起来像这样 我希望数据位于9到10个小时之间……如果有人从事过此类工作,那将非常有帮助。 问题答案: In [7]: index = date_range(‘20131009 08:30’,‘20131010 10:05’,freq=‘5T’)

  • 问题内容: 如果数据如下所示: 我想复制IsHoliday等于TRUE的行,我可以这样做: 但是是否有更好的方法来执行此操作,因为我需要将假日行重复5次,如果使用上述方法,则必须追加5次。 问题答案: 您可以放入列表中,然后执行以下操作:

  • 问题内容: 我有两个pandas数据框,它们有一些共同点。 假设是的子集。 如何获取dataframe1中不在dataframe2中的行? 问题答案: 一种方法是存储两个df的内部合并结果,然后我们可以简单地在一行的值不在此通用值中时选择行: 编辑 你发现的另一种方法是使用isin它将产生NaN可删除的行: 但是,如果df2不能以相同的方式开始行,那么它将行不通: 将产生整个df:

  • 问题内容: 我有以下测试DataFrame: 它给出了如下所示的数据框,其中包含公司ID列“ cid”,唯一ID列“ jid”,开始日期“ stdt”和enddt“ enddt”。 我需要做的是: 计算min(stdt)和max(enddt)之间每个date(newdate)的cid发生的jid数目,其中newdate在stdt和enddt之间。 结果数据集应为每个cid具有一个数据帧,该数据帧的

  • 问题内容: 我有一个数据帧,有三列:,和; 计数是浮点数,日期是2015年的连续几天。 我试图找出和列中每一天的计数之间的差异,这意味着,我试图计算这两列的每一行与上一行之间的差异。我已经将日期设置为索引,但是却很难弄清楚该如何做。关于使用有一些提示,但是我没有运气找到合适的答案或说明。 我有点受阻,不胜感激这里的一些指导。 这是我的数据框的样子: 问题答案: 应该给出期望的结果:

  • 问题内容: 我在Python中使用熊猫有数据框。其中两列分别命名为和。我想创建一个名为 的变量。 问题答案: 如果两个列都是字符串,则可以直接将它们连接起来: 如果其中一列(或两列)都不是字符串类型,则应首先将其转换为字符串, 这样做时要小心! 如果需要连接多个字符串列,可以使用: 其中是分隔符。