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