我有以下数据框:
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年之间?
答案 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()
因为岁月是字符串类型。