指定列的最大值,然后使用pandas

问题描述 投票:0回答:10
Country       Place  Value
US       NewYork     562
US       Michigan    854
US       Illinois    356
UK       London      778
UK       Manchester  512
Spain    Madrid      509
India    Mumbai      196
US       Kansas      894
UK       Liverpool   796
Spain    Barcelona   792

使用pandas,我试图找到具有最大值的

Country
Place

这返回最大值:

data.groupby(['Country','Place'])['Value'].max()
但我如何获得相应的

Country

Place
名?

python pandas dataframe max
10个回答
246
投票

填充

df
具有唯一的索引,这使该行具有最大值:

In [34]: df.loc[df['Value'].idxmax()]
Out[34]: 
Country        US
Place      Kansas
Value         894
Name: 7

注意

idxmax
返回索引字母。因此,如果dataFrame在索引中具有重复项,则标签可能无法唯一标识该行,因此
df.loc
可能返回多个行。

因此,如果没有唯一的索引,则必须在按照上述操作之前使索引独特。根据数据框架,有时您可以使用

df

stack
使索引与众不同。或者,您可以简单地重置索引(从0开始,行重新编织,从0开始):
set_index

df = df.reset_index()

126
投票
这将以最大值返回整个行

我认为以最大值返回一排的最简单方法是获得其索引。

df[df['Value']==df['Value'].max()]

21
投票
argmax()

现在,该索引可用于获得该特定行的功能:

index = df.Value.argmax()
    

国家和地点是该系列的索引,如果您不需要索引,则可以设置
df.iloc[df.Value.argmax(), 0:2]

13
投票
as_index=False

Edit:

似乎您希望每个国家都有最大价值的位置,遵循代码将执行您想要的事情:
df.groupby(['country','place'], as_index=False)['value'].max()

您可以使用:

df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))

10
投票

使用

print(df[df['Value']==df['Value'].max()])
的属性。请注意,我不输入示例中的所有行。

index

9
投票

DataFrame

eDit
为误解您想要的东西而感到恐惧,请尝试跟随:

In [14]: df = data.groupby(['Country','Place'])['Value'].max()

In [15]: df.index
Out[15]: 
MultiIndex
[Spain  Manchester, UK     London    , US     Mchigan   ,        NewYork   ]

In [16]: df.index[0]
Out[16]: ('Spain', 'Manchester')

In [17]: df.index[1]
Out[17]: ('UK', 'London')

在打印国家并以最大价值的位置打印,使用以下代码行。

In [21]: for index in df.index: print index, df[index] ....: ('Spain', 'Manchester') 512 ('UK', 'London') 778 ('US', 'Mchigan') 854 ('US', 'NewYork') 562

使用
In [52]: s=data.max()

In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854

9
投票

为此的专用方法是

print(df[['Country', 'Place']][df.Value == df.Value.max()])
在背景上使用

9
投票

,这是一种表现方式:nlargest

algorithm.SelectNFrame

sort_values().head(n)

    
IMPORTPANDAS
DF是您创建的数据框架。
使用命令:
   x  y  a  b
0  1  2  a  x
1  2  4  b  x
2  3  6  c  y
3  4  1  a  z
4  5  2  b  z
5  6  3  c  z

这将显示最高价值的国家和地点。
    
我的解决方案在列中找到最大值:

3
投票

,也最低:

df1=df[['Country','Place']][df.Value == df['Value'].max()]

我建议使用

df.ix[df.idxmax()]

以提高性能和较短的代码。导入

2
投票

nlargest
    

我在尝试使用pandas导入数据时遇到了类似的错误,我的数据集上的第一列在单词开始之前具有空格。我卸下了空间,它像魅力一样工作!


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.