In [4]:
# nums b result
# 0 20.0 1 20.0
# 1 22.0 0 0
# 2 30.0 1 0
# 3 29.1 1 0
# 4 20.0 0 0
import pandas as pd
import numpy as np
df = pd.DataFrame({
"nums": [20, 22, 30, 29.1, 20],
"b": [20, 22, 30, 29.1, 20],
})
for i in range(10):
df = pd.concat([df, df], ignore_index=True)
print(df)
def some_calc_func(prev_result, prev_num, current_b):
if current_b == 1:
return prev_result * prev_num / 2
else:
return prev_num + 17
In [22]:
%%timeit
for index, row in df.iterrows():
pass
In [23]:
%%timeit
for row in df.itertuples():
pass
In [27]:
%%timeit
for prev_num, curren_b in zip(df['nums'], df.loc[1:, 'b'],df['nums'], df.loc[1:, 'b'],df['nums'], df.loc[1:, 'b'],df['nums'], df.loc[1:, 'b']):
pass
In [8]:
%%timeit
for i in range(1, len(df.index)):
row = df.index[i]
new_row = df.index[i - 1] # get index of previous row for "nums" and "result"
df.loc[row, 'result'] = some_calc_func(prev_result=df.loc[new_row, 'result'], prev_num=df.loc[new_row, 'nums'], \
current_b=df.loc[row, 'b'])
In [ ]: