熊猫:选择不再为负的第一个值,返回行

时间:2019-01-31 18:06:28

标签: python pandas

目前,我的代码如下:

    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

为我提供以下数据框:

          Pr_B          exp         gamma_perc  spread-test in %
10077   0.000066    -2.078477e-08   1.544700    0.001090292473058004120128368625
10078   0.000066    -2.073422e-08   1.545400    0.001090292473058004120128368625
10079   0.000066    -2.071978e-08   1.545600    0.001090292473058004120128368625
10080   0.000066    -2.071256e-08   1.545700    0.001090292473058004120128368625
10081   0.000000    -0.000000e+00   1.545900    0.001090292473058004120128368625
10082   0.000000    -0.000000e+00   1.546200    0.001090292473058004120128368625
10083   0.000000    0.000000e+00    1.546300    0.001090292473058004120128368625
10084   0.000000    1               1.546600    0.001090292473058004120128368625

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

2 个答案:

答案 0 :(得分:2)

尝试:

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

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

如果您想获得系列中的最大值

df.exp.nlargest(1)

编辑

使用它来获得所需的输出:

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

答案 1 :(得分:0)

我将筛选大于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()