У меня есть данные с 3 столбцами и около 50000 строк. Ниже приведен пример -
ID | ДАТА (datetime64) | COUNT
1 | 30-03-2021 | 45
Я хочу, чтобы каждая строка входных данных повторялась значением, указанным в столбце COUNT, и при этом каждая строка должна иметь столбец DATE, уменьшенный на месяц, как показано ниже:
ID | ДАТА (datetime64)
1 | 30-03-2021
1 | 28-02-2021
1 | 30-01-2021
......................
................. .....
1 | 30-07-2017
Я написал код для генерации вышеуказанного вывода, но это занимает много времени (каждая строка входных данных занимает около 0,09199643135070801 секунды, а все 50000 записей занимают около 35 минут ). Ниже приведен код, который я написал:
import time
import pandas as pd
import dateutil.relativedelta
data1 = pd.read_csv("C:\\Users\\ABD\\Desktop\\data1.csv",parse_dates=['DATE'])
start_time = time.time()
data2 =pd.DataFrame()
k=0
for i in range(len(data1)):
for j in range(int(data1.loc[i,'COUNT']) ):
if j==0:
data2.loc[j+k,'ID'] = data1.loc[i,'ID']
data2.loc[j+k,'NEW_DATE']=data1.loc[i,'DATE']
else:
data2.loc[j+k,'ID'] = data1.loc[i,'ID']
data2.loc[j+k,'NEW_DATE']=data1.loc[i,'DATE'] - dateutil.relativedelta.relativedelta(months=j)
k=k+j+1
print("--- %s seconds ---" % (time.time() - start_time))
Пожалуйста, скажите мне, что есть более эффективный способ сделать это. Заранее спасибо !!