首页 > 解决方案 > 如何获得系列中最小值的索引?

问题描述

我的 DataFrame 包含 4 列:City、District、Area 和 Price,其中 Area 是 float64,Price 是 int64。

price_min = df['Price'].min()
# area_min = df['Area'].iloc[np.nanargmin(df['Price'])]
# city_min = df['City'].iloc[np.nanargmin(df['Price'])]
area_min = df['Area'].iloc[df['Price'].idxmin()]
city_min = df['City'].iloc[df['Price'].idxmin()]
print(
    f"If you are looking for a cheap accommodation, "
    f"a {area_min} m² apartment for {price_min} PLN is available in {city_min}"

)

注释行确实有效。但是下面的行会导致错误:

result = values.argmin(axis)
TypeError: argmin() takes 1 positional argument but 2 were given

为什么它不起作用?

标签: pythonpandasdataframenumpyseries

解决方案


使用DataFrame.loc, becauseDataFrame.iloc用于按位置选择,而不是按标签:

df = pd.DataFrame({
        'City':list('abcdef'),
         'District':list('GHIJKL'),
         'Area':[7,8,9,4,2,3],
         'Price':[271,34,55,74,10,120],

})
print (df)

  City District  Area  Price
0    a        G     7    271
1    b        H     8     34
2    c        I     9     55
3    d        J     4     74
4    e        K     2     10
5    f        L     3    120


#for default index values
df = df.reset_index(drop=True)

price_min = df['Price'].min()
area_min = df.loc[df['Price'].idxmin(), 'Area']
city_min = df.loc[df['Price'].idxmin(), 'City']
    
print(
    f"If you are looking for a cheap accommodation, "
    f"a {area_min} m² apartment for {price_min} PLN is available in {city_min}"

)
If you are looking for a cheap accommodation, a 2 m² apartment for 10 PLN is available in e

推荐阅读