Python Pandas基于最小索引从数据帧中提取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Pandas基于最小索引从数据帧中提取值相关的知识,希望对你有一定的参考价值。

我有一个df:

import pandas as pd
import numpy as np

df = pd.DataFrame({"price":[1.1,66.3,11,15.2,1.1], 
                   "qty":[14,2,1,10,1],
                   "c_h":['cheese','ham','ham','cheese','ham'],
                   "qual":['good','good','bad','good','bad']})

打印时df看起来像这样:

      c_h   price  qty  qual
0  cheese     1.1   14  good
1     ham    66.3    2  good
2     ham    11.0    1   bad
3  cheese    15.2   10  good
4     ham     1.1    1   bad

我试图从df的最小指数值返回price'c_h'=='ham' and 'qual=='bad'。最小指数是符合该标准的当前[0,1,2,...]in指数的最低数值

在这个例子中,寻求的最小指数为2,返回的价格为11.0。

注意:我主要使用pandas,但我也可以使用numpy

我以为它会是这样的

df[df['c_h']=='ham' and 'qual'=='bad'].min()[index]

但那不起作用。

答案

你想要这样的东西:

>>> df[(df.c_h == 'ham') & (df.qual == 'bad')].index.min()
2

但是,如果您不只是想要索引,则可以使用索引器:

>>> df.loc[(df.c_h == 'ham') & (df.qual == 'bad'), 'price'].iloc[0]
11.0
>>> df.loc[(df.c_h == 'ham') & (df.qual == 'bad'), 'price'].iloc[[0]]
2    11.0
Name: price, dtype: float64

注意,上面的第一个索引,而不是最低的索引。如果index是普通的int范围索引,那么这些将是等价的。

但是,如果不是:

>>> df.index = [3,1,2,4,0]
>>> df
      c_h  price  qty  qual
3  cheese    1.1   14  good
1     ham   66.3    2  good
2     ham   11.0    1   bad
4  cheese   15.2   10  good
0     ham    1.1    1   bad
>>> df.loc[(df.c_h == 'ham') & (df.qual == 'bad'), 'price']
2    11.0
0     1.1
Name: price, dtype: float64

然后以相同的方式得到第一个:

>>> df.loc[(df.c_h == 'ham') & (df.qual == 'bad'), 'price'].iloc[[0]]
2    11.0
Name: price, dtype: float64

但是最低要求会产生以下影响:

>>> df.loc[(df.c_h == 'ham') & (df.qual == 'bad'), 'price'].sort_index().iloc[[0]]
0    1.1
Name: price, dtype: float64
另一答案

您可以使用'pandas.DataFrame.query()'方法:

df.query("col1 == value1 and col2==value2").sort_index()["target_column"].iloc[0]

以上是关于Python Pandas基于最小索引从数据帧中提取值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:在多索引数据帧中重新索引和插值

Python Pandas - 主要数据帧,想要删除较小数据帧中的所有列

Pandas 如何从 JSON 索引列表并将其放入数据框中?

python 显示pandas数据帧中的所有列

Python数据框组标签

PYTHON Pandas - 根据其他数据帧中的值对数据帧使用 Pandas 样式