Pandas:选择第一个不再为负的值,返回th

2024-04-26 22:03:01 发布

您现在位置:Python中文网/ 问答频道 /正文

现在我的代码如下:

    df = pd.DataFrame()
    max_exp = []
    gammastar = []
    for idx,rw in df_gamma_count.iterrows():
        exp = rw['Pr_B']*(rw['gamma_index']*float(test_spread)*(1+f)-(f+f))
        df = df.append({'exp': exp, 'gamma_perc': rw['gamma_index'], 'Pr_B':rw['Pr_B'], 'spread-test in %': test_spread }, ignore_index=True)
        df = df.sort_values(by= ['exp'], ascending=True)
df

它给出了以下数据帧:

^{pr2}$

我现在需要的是从列exp中选择第一个不再为负的值。我现在所做的是根据列exp对数据帧进行排序,但在那之后我有点卡住了,不知道该去哪里。。。有什么想法吗?谢谢!在


Tags: 数据代码intesttruedataframedfindex
2条回答

尝试:

df.loc[df.exp.gt(0).idxmax()]

这将-从exp列中选择第一个不再为负的值

如果你想在一系列中获得最大的价值

^{pr2}$

编辑

使用此选项可获得所需的输出:

df.loc[df.exp==np.where(all(i > 0 for i in df.exp.tolist()),min([n for n in df.exp.tolist() if n<=0]),max([n for n in df.exp.tolist() if n<=0]))]


print(df.loc[df.exp==np.where(all(i > 0 for i in df.exp.tolist()),min([n for n in df.exp.tolist() if n<=0]),max([n for n in df.exp.tolist() if n<=0]))].head(1))

   Pr_B  exp  gamma_perc  spread-test in %
4   0.0  0.0      1.5459           0.00109

我会筛选出大于0的数字并得到第一个索引

data = [-1,-2,-3, 0]
df = pd.DataFrame(data, columns=['exp'])
value = df.exp[df.exp >= 0].iloc[0] if df.exp[df.exp >= 0].any() else df.exp.max()

相关问题 更多 >