【问题标题】:Matching list element with dataframe element python将列表元素与数据框元素python匹配
【发布时间】:2018-12-05 20:16:14
【问题描述】:

我有一些如下列表:

l1 = ['Category=worker,manager','Name=Ana,Tom', 'Task=Cleaning,Plumbing']

然后我有数据框 df:

Name    | Category        | Task       | OrderNum

Bryan   | worker,manager  | Cleaning,Plumbing | 2
Ana,Tom | worker,manager  | Cleaning,Plumbing | 3

我想为一个列表项找到它,在相应的df列中找到匹配的值,&当找到一个列表的所有匹配项时,然后从OrderNum列返回它的值。

我怎样才能得到它?

【问题讨论】:

  • 这个列表是不可能的。请发布不会引发语法错误的数据结构。
  • @timgeb 更正了列表

标签: python regex pandas list dataframe


【解决方案1】:

给定:

>>> l1 = ['Category=worker,manager','Name=Ana,Tom', 'Task=Cleaning,Plumbing']
>>> 
>>> df
      Name        Category               Task  OrderNum
0    Bryan  worker,manager  Cleaning,Plumbing         2
1  Ana,Tom  worker,manager  Cleaning,Plumbing         3

您可以像这样从l1 形成查询:

>>> query = ' and '.join("{} == '{}'".format(*s.split('=')) for s in l1)
>>> query
"Category == 'worker,manager' and Name == 'Ana,Tom' and Task == 'Cleaning,Plumbing'"

...然后发出

>>> df.query(query)
      Name        Category               Task  OrderNum
1  Ana,Tom  worker,manager  Cleaning,Plumbing         3

>>> df.query(query)['OrderNum']
1    3
Name: OrderNum, dtype: int64

>>> result, = df.query(query)['OrderNum']
>>> result
3

如果您希望准确命中,或者

>>> result = df.query(query)['OrderNum'].iat[0]
>>> result
3

如果您希望至少有一次点击并希望将result 分配给第一次点击,无论有多少。

【讨论】:

  • result, *_ = df.query(query)['OrderNum'] 如果超过 1 个。
  • @coldspeed 也许iat[0] 在这种情况下会更好,因为不需要解压可能很大的系列。
  • @timgeb 结果是空的数据框。但是df绝对不是空的。
  • @user10096621 那么你的数据框看起来不像你说的那样。正如你所看到的,我从字面上复制粘贴了一个解释器会话。 (我猜这就是你没有发布minimal reproducible example 的结果:))。
  • @user10096621 如果问题中没有minimal reproducible example,我将无能为力。
猜你喜欢
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
相关资源
最近更新 更多