繁体   English   中英

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

[英]Python Pandas : Lowest/Highest value since a certain row

我有一个数据集(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() 

这并没有给我所需的结果,因此我们将不胜感激。 环顾了一阵子,或者我的措词在搜索时是错误的(第二语言,所以有时会发生这种情况),或者执行该操作的方法不多。

非常感谢。

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

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]    

将第一列标记为“ 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM