我有一个数据集(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()
这不能给我所需的结果,因此我们将不胜感激。逛了一会儿,或者我的措词在搜索时是错误的(第二语言,所以有时会发生这种情况),或者如何执行此操作没有多少。
非常感谢。
答案 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)