У меня есть фреймворк:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[1,20,3,4,50,6],
'b':[12,43,78,23,14,28],
'c': [100,200,300,400,500,600]})`
Я хочу перебирать последовательные строки так, чтобы
если значение 'a'
следующей строки - значение 'a'
текущей строки равно менее 10,
а затем проверьте, является ли значение 'c'
следующей строки -'b'
текущей строки менее 400
return 0
else return Nan.
Я хотел сделать это с помощью .apply
, написал для этого код.
def query(row,df):
try:
i = row.name
curr = df.iloc[i]
curr_a = curr['a']
next = df.iloc[i+1]
next_a = next['a']
if (next_a-curr_a) < 10:
print(next_a,curr_a)
curr_b = curr['b']
next_c = next['c']
print(next_c,curr_b)
if (next_c - curr_b) < 400:
return 0
else:
diff = np.nan
return diff
except:
pass
df['new_col'] = df.apply(lambda x: query(x,df),axis=1)
В основном я беру индекс текущей строки, то есть i
, и передаю его функции, в которой я нахожу текущую строку с помощью df.iloc[i]
.
и следующую строку с помощью df.iloc[i+1]
, а затем проверку условий. Но я не думаю, что это лучший способ сделать это.
Есть лучший способ это сделать? Может быть, использовать .shift
или любой питонический способ? Любые зацепки будут полезны.
🤔 А знаете ли вы, что...
Python используется в научных вычислениях и обработке изображений с использованием библиотеки OpenCV.