【问题标题】:Is there a function in pandas (python) for filtering data on two conditions?熊猫(python)中是否有用于在两个条件下过滤数据的功能?
【发布时间】:2021-10-03 22:38:11
【问题描述】:

我有一个类似于上述矩阵的 excel 文件。

有两个三列,分别是:ID、Object和AE。

我想先创建一个新列,仅复制 Object 列的前两个字母(例如,V2、V3 等)并将它们放入名为 Object1。

其次,我想看看对于新创建的列 Object1 中的任何 V2 值,是否有 AE 的值。如果是这样,我想得到这样的记录。下面给出了一个示例矩阵:

【问题讨论】:

  • 我认为你可以这样做new_df = df[df['Object'].str.startswith('V2')]。或者,如果您只想要 AE 列中带有“是”的那些,您可以使用 new_df = df[df['Object'].str.startswith('V2') & (df['AE']=='Yes')]
  • @MatthiasFripp。您的代码无法运行,因为它匹配 V20、V21、V30、...
  • @Corralien,问题似乎是说他们想匹配Object 列的前两个字符,我的就是这样。如果这是错误的,发帖人应该澄清这个问题。目前还不清楚他们想要在 AE 列(如果有的话)中测试什么条件,以及他们是真的想要 Object1 列还是只是想用它来测试(不在示例输出中)。
  • @MatthiasFripp,在我的实际情况下,Object 值只能达到 V15,这样代码对我来说工作得非常好。非常感谢。也谢谢大家:)

标签: python excel pandas


【解决方案1】:

您的问题应该更清楚。下面这段代码是否给了你想要的结果?

df.loc[(df['Object'].str.extract('^(V\d+)').isin(['V2', 'V3']).any(axis=1))
       & (df['AE'] == 'Yes')]

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 2017-11-20
    • 1970-01-01
    • 2020-03-22
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多