查找列的最大值并使用Pandas返回相应的行值

时间:2013-04-01 10:31:02

标签: python pandas

Structure of data;

使用Python Pandas我试图找到'Country'& '放置'具有最大值。

返回最大值:

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

但是如何获得相应的“国家/地区”和“地方”名称?

12 个答案:

答案 0 :(得分:113)

假设df具有唯一索引,则为行提供最大值:

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

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

因此,如果df没有唯一索引,则必须使索引唯一,然后才能继续执行上述操作。有时,您可以使用stackset_index使索引唯一,具体取决于DataFrame。或者,您可以简单地重置索引(因此行重新编号,从0开始):

df = df.reset_index()

答案 1 :(得分:27)

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

这将返回整个行的最大值

答案 2 :(得分:8)

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

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

编辑:

您似乎希望每个国家/地区都拥有最大值的地方,以下代码可以执行您想要的操作:

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

答案 3 :(得分:6)

使用index的{​​{1}}属性。请注意,我没有在示例中键入所有行。

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

答案 4 :(得分:5)

导入 Pandas 模块

定义您的DataFrame对象,例如 df ,然后阅读该文件。

要以最大值打印国家/地区,请使用以下代码行。

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

答案 5 :(得分:5)

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

index = df.Value.argmax()

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

df.iloc[df.Value.argmax(), 0:2]

答案 6 :(得分:3)

您可以使用:

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

答案 7 :(得分:2)

进口大熊猫
df是您创建的数据框。

使用命令:

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

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

答案 8 :(得分:1)

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

df.ix[df.idxmax()]

,也是最小值:

df.ix[df.idxmin()]

答案 9 :(得分:0)

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

df[col_name].value_counts().nlargest(n=1)

答案 10 :(得分:0)

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

答案 11 :(得分:0)

使用 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