我有一张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,...]
的最低数值
在此示例中,所寻求的最小索引为2,返回的价格为11.0。
注意:我主要使用pandas
,但我也可以使用numpy
。
我认为它就像是
df[df['c_h']=='ham' and 'qual'=='bad'].min()[index]
但那不起作用。
答案 0 :(得分:1)
你想要这样的东西:
>>> 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
答案 1 :(得分:0)
您可以使用'pandas.DataFrame.query()'方法:
df.query("col1 == value1 and col2==value2").sort_index()["target_column"].iloc[0]