Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:选择第一个不再为负值的值,返回该行_Python_Pandas - Fatal编程技术网

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

Python 熊猫:选择第一个不再为负值的值,返回该行,python,pandas,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['ga

目前,我的代码如下所示:

    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
对数据帧进行排序,但之后我有点卡住了,不知道该去哪里。。。有什么想法吗?

我会筛选大于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()
尝试:

这将从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

df.loc[df.exp==np.where(all(i>0表示df.exp.tolist()中的i),min([n表示df.exp.tolist()中的n),如果您可以通过
exp
DataFrame
进行排序,那么“第一个值”的定义是什么?您是指最小正数?还是指原始排序顺序中第一次出现的正值?
df.exp.gt(0).idxmax()
?@Idlehands,最小正数或最大负数I不够清楚。在某些情况下,我的数据可能是[-3,-2,-1]我需要选择-1,在某些情况下我有[-2,-1,0],然后我需要取零,在第三个示例中,如果我有[-1,0,1],我需要取0。你有可以应用于所有3种情况的代码行吗?是的,但是当我将数据更改为data=[-1,-2,-3,0,1]它应该给我零。这就是我在下面解释的,它应该给我最小的正数和最大的负数:)你这是什么意思?为什么你没有得到0而不是1呢?因为屏幕是
df.exp>0
而不是
df.exp>=0
我调整了答案,我不够清楚。在某些情况下,我的数据可能是[-3,-2,-1],我需要选择-1,在某些情况下我有[-2,-1,0]然后我需要取零,在第三个示例中,如果我有[-1,0,1],我需要取0。你有可以应用于所有3种情况的代码行吗?
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