在Pandas中查找给定间隔的列的最小值

时间:2018-04-20 08:59:17

标签: python python-3.x pandas dataframe

我有以下数据框:

                 GDP
Year Quarter        
1955 Q1       109967
     Q2       110087
     Q3       112333
     Q4       111731
1956 Q1       112952
     Q2       112709
     Q3       112601
     Q4       113078
1957 Q1       115315
     Q2       115292
     Q3       114582
     Q4       114775

为了找到指定列的最小值,我可以写成:

min(df['GDP'])

我想知道如何在指定的时间间隔内获得GDP列的最低值?例如1955年或1955年至1956年之间?

2 个答案:

答案 0 :(得分:0)

使用slicers选择和标记输出选择列min

注意:

如果级别Year是字符串,请''添加'1955':'1956',而不是1955:1956

或者按MultiIndex.set_levels将字符串转换为数字:

df.index = df.index.set_levels(df.index.get_level_values('Year').astype(int), level=0)
idx = pd.IndexSlice
a = df.loc[idx[1955:1956], 'GDP'].min()
print (a)
109967

a = df.loc[idx[1955:1956, 'Q2'], 'GDP'].min()
print (a)
110087

a = df.loc[1956, 'GDP'].min()
print (a)
112601

<强>详情:

print (df.loc[idx[1955:1956], 'GDP'])
Year  Quarter
1955  Q1         109967
      Q2         110087
      Q3         112333
      Q4         111731
1956  Q1         112952
      Q2         112709
      Q3         112601
      Q4         113078
Name: GDP, dtype: int64

print (df.loc[idx[1955:1956, 'Q2'], 'GDP'])
Year  Quarter
1955  Q2         110087
1956  Q2         112709
Name: GDP, dtype: int64

print (df.loc[1956, 'GDP'])
Quarter
Q1    112952
Q2    112709
Q3    112601
Q4    113078
Name: GDP, dtype: int64

答案 1 :(得分:0)

为了获得正确的结果,我们应该使用

df.loc[pd.IndexSlice["1955":"1956"], 'GDP'].min()

因为岁月是字符串类型。