Python 如何在数据帧的子集内获得最大值?

Python 如何在数据帧的子集内获得最大值?,python,indexing,pandas,subset,Python,Indexing,Pandas,Subset,如何在数据帧的子集内获得最大值 例如,当我做一些类似 statedata[statedata['state.region'] == 'Northeast'].ix[statedata['Murder'].idxmax()] 我得到一个KeyError,它指示idxmax返回全局最大值(Alabama)的键,而不是查询的子集中的最大值(该键当然丢失) 有没有办法在熊猫身上简洁地做到这一点 作为参考,此处使用的数据来自R,使用 data(state) statedata = cbind(data

如何在数据帧的子集内获得最大值

例如,当我做一些类似

statedata[statedata['state.region'] == 'Northeast'].ix[statedata['Murder'].idxmax()]
我得到一个KeyError,它指示
idxmax
返回全局最大值(Alabama)的键,而不是查询的子集中的最大值(该键当然丢失)

有没有办法在熊猫身上简洁地做到这一点


作为参考,此处使用的数据来自R,使用

data(state)
statedata = cbind(data.frame(state.x77), state.abb, state.area, state.center, state.division, state.name, state.region)
然后从R导出并由Pandas导入。

您可以使用选择子数据帧:

import pandas as pd
import pandas.rpy.common as com
import rpy2.robjects as ro

r = ro.r
statedata = r('''cbind(data.frame(state.x77), state.abb, state.area, state.center,
                 state.division, state.name, state.region)''')
df = com.convert_robj(statedata)
df.columns = df.columns.to_series().str.replace('state.', '')
subdf = df.loc[df['region']=='Northeast', 'Murder']
print(subdf)
# Connecticut       3.1
# Maine             2.7
# Massachusetts     3.3
# New Hampshire     3.3
# New Jersey        5.2
# New York         10.9
# Pennsylvania      6.1
# Rhode Island      2.4
# Vermont           5.5
# Name: Murder, dtype: float64
print(subdf.idxmax())
印刷品

New York

要为每个地区选择谋杀率最高的州():

In [24]: df.groupby('region')['Murder'].idxmax()
Out[24]: 
region
North Central    Michigan
Northeast        New York
South             Alabama
West               Nevada
Name: Murder, dtype: object

有没有办法使用
com.load_data
do一次加载所有额外数据(而不是一个
df['region']=com.load_data('state.region'))
对于每一列。有没有更好的方法来处理有两列的
'state.center'
?我认为在这种情况下,使用R语法来形成R数据帧可能更容易,然后使用
com.convert\u robj
将其转换为Pandas数据帧。我已经更新了上面的代码来演示如何。这可能是一个很好的示例: