У меня есть фрейм данных с 3 столбцами:
reading_df:
c1 c2 c3
1 1 0.104986
1 1 0.628024
0 0 0.507727
1 1 0.445931
0 1 0.867830
1 1 0.455478
1 0 0.271283
0 1 0.759124
1 0 0.382079
0 1 0.572290
Для каждого элемента в 3 столбце (c3) я должен найти, сколько элементов (строк):
- имеют одинаковые значения для c1
- имеют одинаковые значения для c2
- различия между значениями в c3 в данной строке и каждой строке должны быть меньше, чем 0,3
Например, запись ответа в столбце c4
c1 c2 c3 c4
1 1 0.104986 0
1 1 0.628024 2
0 0 0.507727 0
1 1 0.445931 0
0 1 0.867830 2
1 1 0.455478 1
1 0 0.271283 0
0 1 0.759124 1
1 0 0.382079 1
0 1 0.572290 0
Я преобразую фрейм данных в массив numpy и использую функцию map с labmda для достижения максимальной производительности.
reading_df['c4']=np.zeros(df.shape[0])
X=np.array(reading_df)
c1=0
c2=1
c3=2
dT=0.3
res_map = map(lambda el: len( X[
( X[:,n_time] > (el[n_time]-dT) )
& ( X[:,n_time] < (el[n_time]) )
& ( X[:,n_feature2] == (el[n_feature2]) )
& ( X[:,n_feature1] == (el[n_feature1]) )
][:,n_time]), X)
Но когда япопытаться преобразовать объект карты res_map
в список:
result=list(res_map)
result_dataframe=pd.DataFrame({'c4':result })
мой код стал очень медленным.И очень долго работайте с большим фреймом данных с более чем 1 * 10 ^ 6 элементов.
Какую функцию я должен использовать?И какие лучшие практики, чтобы заставить Python работать быстрее?