У меня есть два разных фрейма данных панд, где в первом фрейме данных (цена) у меня есть два столбца. В первом столбце с именем value есть несколько значений, а во втором столбце сумма имеет доступную сумму для каждой цены. Второй фрейм данных (ячейки) имеет в качестве индекса некоторые ценовые интервалы, которые создаются из фрейма ценовых данных. Для каждой строки фрейма данных цены я проверяю каждую строку столбца значений, чтобы найти интервал, которому он принадлежит, из фрейма данных бункеров, и, если значение находится в интервале, я назначаю доступную сумму в фрейме данных бункеров. Если другое значение снова находится в том же интервале, я суммирую эти суммы во фрейме данных group_bins.
import pandas as pd
bins = pd.DataFrame({
'value': [1, 2, 5, 7, 8, 16, 20, 3, 9, 11, 35, 12, 54, 33, 3, 22, 23]
})
price = pd.DataFrame({
'value': [2, 5, 7, 8, 16, 20, 3, 9, 11, 2.5, 3.4],
'amount': [50, 112, 130, 157, 146, 148, 300, 124, 151, 100, 32]
})
bins['bins'] = pd.qcut(bins['value'], 12)
group_bins = bins.groupby(['bins']).sum()
group_bins['amount'] = 0
del group_bins['value']
for j in range(price.shape[0]):
for i in range(group_bins.shape[0]):
if price.loc[j, 'value'] in group_bins.index[i]:
group_bins.loc[group_bins.index[i], 'amount'] += price.loc[j, 'amount']
break
Ожидаемый результат:
amount
bins
(0.999, 2.333] 50
(2.333, 3.0] 400
(3.0, 5.0] 144
(5.0, 7.333] 130
(7.333, 8.667] 157
(8.667, 11.0] 275
(11.0, 13.333] 0
(13.333, 18.667] 146
(18.667, 22.0] 148
(22.0, 26.333] 0
(26.333, 34.333] 0
(34.333, 54.0] 0
Моя проблема в том, что у меня есть данные 100k ивесь этот процесс занимает слишком много времени, чтобы закончить. Есть ли какой-нибудь элегантный и намного более быстрый способ заменить эти вложенные циклы for и условие if?
Ожидаемый результат - последний столбец в столбце суммы group_bins. Любая помощь приветствуется! Спасибо.