Могу ли я ускорить время выполнения кода ниже?
этот код для моего денежного плана
Я должен продолжать использовать свой денежный журнал
, потому что мне нужно получить трассировкуиспользования денег
def seperate_accumulate_m(m_df):
"""
make accumulate money paper according to option number
"""
m_df = m_df.reset_index(drop=True)
m_df.loc[0, "etc_m"] = 0
m_df.loc[0, "sell_m"] = 0
m_df.loc[0, "buy_m"] = 0
m_df.loc[0, "use_m"] = 0
m_df.loc[0, "gone_m"] = 0
if m_df.loc[0, "option"] == 3:
m_df.loc[0, "etc_m"] = m_df.loc[0, "m"]
elif m_df.loc[0, "option"] == 2:
m_df.loc[0, "sell_m"] = m_df.loc[0, "m"]
elif m_df.loc[0, "option"] == 1:
m_df.loc[0, "buy_m"] = m_df.loc[0, "m"]
else:
pass
for idx in range(1, len(m_df)):
if m_df.loc[idx, "option"] == 3:
m_df.loc[idx, "etc_m"] = m_df.loc[idx-1, "etc_m"] + m_df.loc[idx, "m"]
m_df.loc[idx, "sell_m"] = m_df.loc[idx-1, "sell_m"] + 0
m_df.loc[idx, "buy_m"] = m_df.loc[idx-1, "buy_m"] + 0
m_df.loc[idx, "use_m"] = m_df.loc[idx-1, "use_m"] + 0
m_df.loc[idx, "gone_m"] = m_df.loc[idx-1, "gone_m"] + 0
elif m_df.loc[idx, "option"] == 2:
m_df.loc[idx, "etc_m"] = m_df.loc[idx-1, "etc_m"] + 0
m_df.loc[idx, "sell_m"] = m_df.loc[idx-1, "sell_m"] + m_df.loc[idx, "m"]
m_df.loc[idx, "buy_m"] = m_df.loc[idx-1, "buy_m"] + 0
m_df.loc[idx, "use_m"] = m_df.loc[idx-1, "use_m"] + 0
m_df.loc[idx, "gone_m"] = m_df.loc[idx-1, "gone_m"] + 0
elif m_df.loc[idx, "option"] == 1:
m_df.loc[idx, "etc_m"] = m_df.loc[idx-1, "etc_m"] + 0
m_df.loc[idx, "sell_m"] = m_df.loc[idx-1, "sell_m"] + 0
m_df.loc[idx, "buy_m"] = m_df.loc[idx-1, "buy_m"] + m_df.loc[idx, "m"]
m_df.loc[idx, "use_m"] = m_df.loc[idx-1, "use_m"] + 0
m_df.loc[idx, "gone_m"] = m_df.loc[idx-1, "gone_m"] + 0
else:
continue
return m_df
размер данных составляет 3 500 000 строк
, а размер m_no равен 90000 строк
def get_total_accumulate_m_df(data):
"""
make total dataframe base on seperate_accumulate_m
"""
tmp_df = pd.DataFrame()
for mno in tqdm(data["m_no"].unique()):
mno_df = data[data["m_no"] == mno]
mno_df = mno_df.sort_values(by='regdt')
mno_df = mno_df.reset_index(drop=True)
df = seperate_accumulate_m(mno_df)
tmp_df = pd.concat([tmp_df, df])
return tmp_df
Эта строка тратит время около 2 часов, я хочу сократить время!Пожалуйста, помогите мне.
df = get_total_accumulate_emoney_df(data)
Спасибо.