使用 Pandas 查找列的最大值并返回相应的行值
- 2025-03-13 09:12:00
- admin 原创
- 40
问题描述:
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
呢?
解决方案 1:
假设df
有一个唯一索引,这将给出具有最大值的行:
In [34]: df.loc[df['Value'].idxmax()]
Out[34]:
Country US
Place Kansas
Value 894
Name: 7
请注意,idxmax
返回索引标签。因此,如果 DataFrame 在索引中有重复项,则标签可能无法唯一地标识该行,因此df.loc
可能会返回多行。
因此,如果df
没有唯一索引,则必须先使索引唯一,然后再执行上述操作。根据 DataFrame,有时您可以使用stack
或set_index
使索引唯一。或者,您可以简单地重置索引(这样行就会重新编号,从 0 开始):
df = df.reset_index()
解决方案 2:
df[df['Value']==df['Value'].max()]
这将返回具有最大值的整行
解决方案 3:
我认为返回具有最大值的行的最简单方法是获取其索引。argmax()
可用于返回具有最大值的行的索引。
index = df.Value.argmax()
现在可以使用索引来获取特定行的特征:
df.iloc[df.Value.argmax(), 0:2]
解决方案 4:
国家和地点是系列的索引,如果不需要索引,可以设置as_index=False
:
df.groupby(['country','place'], as_index=False)['value'].max()
编辑:
似乎您想要每个国家/地区中具有最大值的地方,以下代码将满足您的要求:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
解决方案 5:
您可以使用:
print(df[df['Value']==df['Value'].max()])
解决方案 6:
使用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
解决方案 7:
为了打印具有最大值的国家和地点,请使用以下代码行。
print(df[['Country', 'Place']][df.Value == df.Value.max()])
解决方案 8:
使用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
解决方案 9:
import pandas
df 是您创建的数据框。
使用命令:
df1=df[['Country','Place']][df.Value == df['Value'].max()]
这将显示值最大的国家和地区。
解决方案 10:
查找列中的最大值的解决方案:
df.ix[df.idxmax()]
,也是最小值:
df.ix[df.idxmin()]
解决方案 11:
我建议使用nlargest
以获得更好的性能和更短的代码。导入pandas
df[col_name].value_counts().nlargest(n=1)
解决方案 12:
我在尝试使用 pandas 导入数据时遇到了类似的错误,我的数据集的第一列在单词开头之前有空格。我删除了空格,一切正常!!