Python Pandas:自某行以来的最低/最高价值

时间:2018-07-20 11:17:09

标签: python pandas dataframe

我有一个数据集(pd.DataFrame),看起来像这样:

date    0
2015 Q4 -1.0
2016 Q1 0.8
2016 Q2 0
2016 Q3 0.1
2016 Q4 0.7
2017 Q1 -0.4
2017 Q2 -0.2
2017 Q3 1.2
2017 Q4 0.8
2018 Q1 -0.4

我正在尝试查找列中的数据最后一次与最新行的数据一样低(在这种情况下:应该是在2017年第一季度),因此需要使用它,以便如果最新的数字是肯定的是,它将找到最后一次如此之高。

发现后,我需要提取该行的索引值。 (在这种情况下为“ 2017年第一季度”)

我一直在尝试令人讨厌的代码(我只是最近才开始编码):

from heapq import nsmallest
from heapq import nlargest
    def second_smallest(numbers):
        return nsmallest(2, numbers)[-1]
    def second_largest(numbers):
        return nlargest(2, numbers)[-1]


    def next_smallest(df = pd.DataFrame()):
        x = df[-1:].item()
        if x <= 0:
            y = df[df>= x]
            second = second_smallest(y)
            return  df.index[df == second].tolist() 

这不能给我所需的结果,因此我们将不胜感激。逛了一会儿,或者我的措词在搜索时是错误的(第二语言,所以有时会发生这种情况),或者如何执行此操作没有多少。

非常感谢。

2 个答案:

答案 0 :(得分:0)

这能给您您想要的东西吗?

if df.value.iloc[-1] < 0: 
    idx = df.index[df.value<=df.value.iloc[-1]][-2]
else:
    idx = df.index[df.value>=df.value.iloc[-1]][-2]

date = df.date.iloc[idx]    

答案 1 :(得分:0)

将第一列标记为“ id”,将第二列标记为“ value”,一种方法是将所有具有相同值的行标识为最新行,然后获取具有该值的最后一个日期。参见下面的模拟数据:

df = pd.DataFrame({'id': ['date1', 'date2', 'date3', 'date4', 'date5', 'date6', 'date7', 'date8'], 'value': [3, -1, 0, 3, 2, 5, 4, 3]})
df_same_value_as_latest = df.loc[df['value']==df['value'].tolist()[-1]]
date_required = df_same_value_as_latest.iloc[df_same_value_as_latest.shape[0]-2,:]['id']
print(date_required)