【问题标题】:select rows with certain values of a column in pandas data frames在熊猫数据框中选择具有特定列值的行
【发布时间】:2015-03-29 12:31:58
【问题描述】:

如果我有如下的数据框 df:

   food      price   amount
0  apple      2.0     3
1  grape      3.0     20
2  orange     1.9     3.0
3  pork       3.0     0.5
4  lattice    1.0     1.0
5  pear       3.0     2
6  zucchini   2.5     1
7  pumpkin    2.0     0.5
8  grape      3.0     30

我有以下 np.array:

fruit = np.array([apple, pear, orange, grape])

我只想在食物名称在水果数组中时才提取数据框中的行。到目前为止,我有以下代码可以满足我的需求:

df[df['food'].apply(lambda x: x in fruit)]

我想知道是否还有其他方法可以做类似的事情。

【问题讨论】:

    标签: python performance numpy pandas dataframe


    【解决方案1】:

    试试:

    df[df['food'].isin(['apple', 'pear', 'orange', 'grape'])
    

    【讨论】:

      【解决方案2】:

      在现代 pandas 中,您可以使用 DataFrames 的 query 方法:

      >>> fruit = np.array(["apple", "pear", "orange", "grape"])
      >>> df.query("food in @fruit")
           food  price  amount
      0   apple    2.0       3
      1   grape    3.0      20
      2  orange    1.9       3
      5    pear    3.0       2
      8   grape    3.0      30
      

      其中@ 表示“以下名称指的是环境中的变量,而不是框架的列”。

      【讨论】:

      • 你知道性能上的差异吗?也许查询更快?谢谢!
      • 不同;自己使用timeit 来找出它是否真的是一个瓶颈总是一个好主意。对于较长的帧,它会比apply 快得多,但对于较小的帧,您将无法分摊启动成本,因此可能会慢一些。
      猜你喜欢
      • 2018-05-20
      • 2017-03-17
      • 2022-01-21
      • 1970-01-01
      • 2021-07-17
      • 2013-06-29
      • 2015-08-15
      • 2015-12-03
      相关资源
      最近更新 更多