У меня есть датафрейм, как показано ниже.Я хотел бы просмотреть столбец «Krg» и найти строку, соответствующую последнему нулевому значению в этом столбце, и сообщить «Sg» из этой строки (0,03).Кроме того, я хотел бы сообщить 'Sg', соответствующее 1-му ненулевому значению 'Krg' (0,04).
Я мог бы добиться этого с помощью query () - см. Мой код ниже.
import pandas as pd
col_labels = ['Sg', 'Krg', 'Krw', 'Pc']
df = pd.DataFrame(columns=col_labels)
f = open('EPS.INC', 'r')
for line in f:
if 'SGWFN' in line:
print('Reading relative permeability table')
for line in f:
line = line.strip()
if (line.split() and not line.startswith('/') and not line.startswith('--')):
cols = line.split()
df=df.append(pd.Series(([float(i) for i in cols]), index=col_labels), ignore_index=True)
print(df.loc[df.query('Krg != 0')['Krg'].idxmin(), 'Sg'])
print(df.loc[(df.query('Krg != 0')['Krg'].idxmin())-1, 'Sg'])
Sg Krg Krw Pc
0 0.00 0.000000 1.000000 0.000000
1 0.03 0.000000 0.500000 0.091233
2 0.04 0.000518 0.484212 0.093203
3 0.05 0.001624 0.468759 0.095237
4 0.06 0.003171 0.453639 0.097338
5 0.07 0.005098 0.438848 0.099508
6 0.08 0.007367 0.424382 0.101751
7 0.09 0.009953 0.410237 0.104070
8 0.10 0.012835 0.396410 0.106469
9 0.11 0.015999 0.382897 0.108950
10 0.12 0.019431 0.369695 0.111518
Код не выглядит слишком «пагубным» и кажется медленным.Есть ли более разумный способ получить эти значения Sg?
Cheers, D