如何在Pandas数据框的子集中获取最大值?

3 投票
1 回答
4171 浏览
提问于 2025-04-17 22:26

我该如何在Pandas中获取数据框中特定子集的最大值呢?

比如,当我执行类似下面的操作时:

statedata[statedata['state.region'] == 'Northeast'].ix[statedata['Murder'].idxmax()]

我遇到了一个KeyError错误,这个错误提示说idxmax返回的是全局最大值的键,也就是阿拉巴马州,而不是我查询的子集中的最大值(显然这个键在子集中是不存在的)。

有没有什么简单的方法可以在Pandas中做到这一点呢?


作为参考,这里使用的数据来自R,使用了:

data(state)
statedata = cbind(data.frame(state.x77), state.abb, state.area, state.center, state.division, state.name, state.region)

然后从R导出并被Pandas导入。

1 个回答

5

你可以使用 df.loc 来选择一个子数据框:

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

要选择每个地区谋杀率最高的州(根据1976年的数据):

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

撰写回答