166

数据结构;

使用 Python Pandas 我试图找到具有最大值的Country& 。Place

这将返回最大值:

data.groupby(['Country','Place'])['Value'].max()

但是如何获得对应的CountryPlace名称呢?

4

12 回答 12

215

假设df有一个唯一索引,这将给出具有最大值的行:

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

请注意,idxmax返回索引标签。因此,如果 DataFrame 在索引中有重复项,则标签可能无法唯一标识行,因此df.loc可能返回多行。

因此,如果df没有唯一索引,则必须先使索引唯一,然后再进行上述操作。根据 DataFrame,有时您可以使用stackset_index使索引唯一。或者,您可以简单地重置索引(因此行重新编号,从 0 开始):

df = df.reset_index()
于 2013-04-01T10:58:15.587 回答
91
df[df['Value']==df['Value'].max()]

这将返回具有最大值的整行

于 2018-04-30T17:07:24.813 回答
15

我认为返回具有最大值的行的最简单方法是获取其索引。argmax()可用于返回具有最大值的行的索引。

index = df.Value.argmax()

现在索引可用于获取该特定行的特征:

df.iloc[df.Value.argmax(), 0:2]
于 2018-05-09T10:48:05.617 回答
13

国家和地方是系列的索引,如果不需要索引,可以设置as_index=False

df.groupby(['country','place'], as_index=False)['value'].max()

编辑:

似乎您想要每个国家/地区都具有最大值的地方,以下代码将满足您的需求:

df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
于 2013-04-01T10:50:04.710 回答
9

使用 的index属性DataFrame。请注意,我没有键入示例中的所有行。

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
于 2013-04-01T10:44:57.140 回答
6

为了以最大值打印 Country 和 Place,请使用以下代码行。

print(df[['Country', 'Place']][df.Value == df.Value.max()])
于 2018-02-20T06:53:42.793 回答
6

您可以使用:

print(df[df['Value']==df['Value'].max()])
于 2020-02-16T15:01:41.747 回答
2

我在列中查找最大值的解决方案:

df.ix[df.idxmax()]

,也是最小值:

df.ix[df.idxmin()]
于 2019-01-14T21:12:12.637 回答
2

我建议使用nlargest以获得更好的性能和更短的代码。进口pandas

df[col_name].value_counts().nlargest(n=1)
于 2019-05-26T05:47:22.610 回答
2

import pandas
df 是您创建的数据框。

使用命令:

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

这将显示值最大的国家和地区。

于 2020-03-23T07:22:45.157 回答
1

使用DataFrame.nlargest.

专门的方法是在后台nlargest使用algorithm.SelectNFrame,这是一种高效的方法:sort_values().head(n)

   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
df.nlargest(1, 'y')

   x  y  a  b
2  3  6  c  y
于 2021-03-10T12:18:10.967 回答
0

我在尝试使用 pandas 导入数据时遇到了类似的错误,我的数据集上的第一列在单词开头之前有空格。我删除了空格,它就像一个魅力!

于 2019-11-29T04:16:48.180 回答