【问题标题】:Cleanest way to query a DataFrame on multiple columns在多列上查询 DataFrame 的最简洁方法
【发布时间】:2021-09-27 10:41:13
【问题描述】:

我有一个包含 3 列的 DataFrame,它们代表相同的数据(人名)。这些列是UsernameBuyerNameTravelerName。在某些情况下,这三列可以共享相同的值(例如,用户名是购买机票并用于旅行的同一个人),我想排除/过滤这些情况。这是我当前的工作代码:

def filter_df(df, user_name):
   filtered_df = df.query(f'Username != "{user_name}" & BuyerName != "{user_name}" & TravelerName != "{user_name}")
   return filtered_df

我想知道是否有更聪明的方法来执行此查询,而不是在列上一遍又一遍地重复相同的值。

【问题讨论】:

  • df[df[['Username','BuyerName','TravelName']].ne(user_name).all(1)].
  • This answer 提供了一种干净/可读/标准的方法(从熊猫的角度来看)。不过,不得不说上面的@QuangHoang评论很美!
  • 谢谢!一个扩展原问题的问题,这个解决方案是否也可以应用于user_name在三列中至少出现一次时过滤行的情况?

标签: python pandas dataframe


【解决方案1】:

你可以试试.format():

def filter_df(df, user_name):
   return df.query('Username != "{0}" & BuyerName != "{0}" & TravelerName != "{0}"'.format(user_name))

【讨论】:

    【解决方案2】:

    您可以使用此处说明的高级字符串格式,因此您不必一遍又一遍地重复 user_name 变量名称:Inserting the same value multiple times when formatting a string

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-29
      • 2022-01-03
      • 1970-01-01
      • 2013-08-10
      • 2012-06-19
      • 2020-12-03
      相关资源
      最近更新 更多