【发布时间】:2013-03-22 10:16:19
【问题描述】:
使用 Python Pandas 我试图找到具有最大值的 Country 和 Place。
这会返回最大值:
data.groupby(['Country','Place'])['Value'].max()
但是如何获取对应的Country 和Place 名称呢?
【问题讨论】:
标签: python pandas dataframe max
使用 Python Pandas 我试图找到具有最大值的 Country 和 Place。
这会返回最大值:
data.groupby(['Country','Place'])['Value'].max()
但是如何获取对应的Country 和Place 名称呢?
【问题讨论】:
标签: python pandas dataframe max
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
【讨论】:
你可以使用:
print(df[df['Value']==df['Value'].max()])
【讨论】:
为了以最大值打印国家和地点,请使用以下代码行。
print(df[['Country', 'Place']][df.Value == df.Value.max()])
【讨论】:
导入熊猫
df 是您创建的数据框。
使用命令:
df1=df[['Country','Place']][df.Value == df['Value'].max()]
这将显示最大值的国家和地点。
【讨论】:
我在尝试使用 pandas 导入数据时遇到了类似的错误,我的数据集的第一列在单词开头之前有空格。我删除了空格,它就像一个魅力!
【讨论】:
我建议使用nlargest 以获得更好的性能和更短的代码。导入pandas
df[col_name].value_counts().nlargest(n=1)
【讨论】:
我认为返回具有最大值的行的最简单方法是获取其索引。 argmax() 可用于返回最大值所在行的索引。
index = df.Value.argmax()
现在可以使用索引来获取该特定行的特征:
df.iloc[df.Value.argmax(), 0:2]
【讨论】:
我在列中查找最大值的解决方案:
df.ix[df.idxmax()]
,也是最小值:
df.ix[df.idxmin()]
【讨论】:
假设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()
【讨论】:
df[df['Value']==df['Value'].max()]
这将返回具有最大值的整行
【讨论】:
国家和地方是系列的索引,如果不需要索引,可以设置as_index=False:
df.groupby(['country','place'], as_index=False)['value'].max()
编辑:
您似乎想要每个国家/地区都具有最大值的地方,以下代码将满足您的需求:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
【讨论】:
使用DataFrame 的index 属性。请注意,我没有输入示例中的所有行。
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
【讨论】: