【问题标题】:Python / Pandas - get_group that has partial stringPython / Pandas - 具有部分字符串的 get_group
【发布时间】:2017-11-16 20:36:59
【问题描述】:

我有一个这样的数据框:

name   . profession
Alex   . Data Analyst
Markus . Sales Manager
Carlos . Credit Analyst
Otavio . HR Manager
...

我需要知道这个数据框中有多少人在其职业中拥有字符串“Analyst”。答案应该是 2。

我正在尝试使用groupbyget_group,但是我没有找到将其放入get_group 语法的正确方法。

现在我在这里:

df.groupby('profession').get_group(???).agg('count')

有人可以建议什么是正确的语法或建议另一种方法吗?

【问题讨论】:

  • 值得一提的是,一般情况下,您不能 get_group 获取子字符串。您可以做的是通过 trie 或其他方式获得,大多数情况下 .str.contains 会更快(尽管它可能是 O(n) 可能是一个问题),但是如果您要重新计算许多“针”,它可以值得索引 groupby 键(例如使用 trie)。

标签: python pandas


【解决方案1】:

如果你想要标量答案,你可以使用这个命令:

df.profession.str.contains('Analyst').sum()

输出:

2

或者作为带有groupby的数据框:

df.assign(is_analyst = df.profession.str.contains('Analyst'))\
  .groupby('is_analyst')['name']\
  .size()

输出:

is_analyst
False    2
True     2
Name: name, dtype: int64

【讨论】:

  • 伟大的斯科特。这就是答案。有没有办法在句子中包含 OR(如 str.contains("analyst" OR "magician")?
  • @abutremutante 是的,在contains 方法的pat 参数中使用正则表达式。 df.profession.str.contains('Analyst|Magician')
  • @abutremutante 你能接受这个很棒的答案吗:-)
  • 绝对!我只是在等待最短的时间。
猜你喜欢
  • 2017-07-15
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多