【问题标题】:Filter df based on multiple column values of other columns in the same df根据同一df中其他列的多个列值过滤df
【发布时间】:2020-09-25 04:44:19
【问题描述】:

我有下面的df:

id | status | id_reference
1    True        NaN
4    False       1
2    False       Nan
7    False       3
6    True        2
10   True        4

我怎样才能只过滤或想要 df 中的行,其中:

状态栏Trueid_reference列值作为值存在于df中的另一行,id列作为值。

所以基于上面的df,

我想要下面的行:

id | status | id_reference 
6    True        2
10   True        4 

实际的df要大得多,因为这是一个样本

【问题讨论】:

  • 鼓励编辑问题以改进它们(例如澄清、添加其他信息等)鼓励。但是,编辑一个问题以将其更改为另一个问题,这会使一个或多个答案无效,这违反了 Stack Overflow 的政策。您在此处的编辑就是这样做的。该政策是其他具有编辑权限的用户应主动恢复此类更改。我已恢复您的编辑。 我们鼓励您ask a new Question,也许可以提供指向此链接的链接以获取更多上下文。我们想提供帮助,但您的新问题/其他问题必须是新问题。

标签: python python-3.x pandas pandas-groupby


【解决方案1】:

如果您还没有将id_reference 转换为float 并使用isin

print (df.loc[df["status"]&df["id_reference"].astype(float).isin(df["id"])])

   id  status id_reference
4   6    True            2
5  10    True            4

【讨论】:

  • 另外一次,当用户编辑他们的问题使得编辑使答案无效时,请回滚问题编辑。如果您是唯一一个回答的人,您可以选择允许编辑问题并修改您的答案,但是对于因编辑无效的问题的多个答案,最好主动回滚问题编辑。请参阅How much change to the question is too much?。执行此类回滚是任何具有完全编辑权限(即 > 2k 声誉)的用户都应该执行的操作。
  • 除了回滚问题之外,我还回滚了您对回答原始问题的版本的回答。
【解决方案2】:

您可以尝试以下方法:

df.loc[df["status"] & df["id_ref"].isin(df["id"])]

【讨论】:

    【解决方案3】:

    你可以试试这个:

    df = df.query('status == True & id_reference.notnull()')
    print(df)
    

    【讨论】:

      【解决方案4】:
      def filterDataSet(self,dataSetValues):
          try :
              print(dataSetValues)  dataSetValues= dataSetValues.fillna(0)
              dataSetValues = dataSetValues[dataSetValues.id_reference>0]
              dataSetValues = dataSetValues[dataSetValues.status == True]
              return dataSetValues
          except ValueError as ve:
              print("Exception while filter data ", ve)
      

      【讨论】:

      • 不幸的是,在您回答问题之前不久,问题作者对问题进行了编辑,导致现有答案无效。进行这样的编辑是against policy。我已将问题回滚到其他答案回答的版本。不幸的是,这意味着您的答案与现在的问题不同。对于这种情况,我没有完美的解决方案。在选择继续时考虑回滚问题会损害您的答案 [继续]
      • [继续] 回滚问题,但还有其他三个答案(一个您看不到,因为它已被删除)受到影响。基本上,决定归结为应该留下对 3 个答案的伤害,还是回滚问题编辑并伤害 1 个答案,你的。我的选择是,最好是伤害一个而不是三个。我希望有一个更好的解决方案,但我真的没有看到。您可以选择随心所欲地回答您的问题。一些可能性是编辑您的答案以回答当前的问题,删除您的答案等。
      猜你喜欢
      • 2020-10-28
      • 2023-01-23
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2022-01-08
      • 2019-11-02
      • 2020-12-29
      相关资源
      最近更新 更多