У меня есть следующий пример фрейма данных:
N = np.arange(1, 10)
df = pd.DataFrame({
'ref': [ 'a', 'b', 'c', 'd', 'c', 'b', 'a', 'b', 'c'],
'a': [ 1, 2, 3, 4, 5, 6, 7, 8, 9],
'b': [ 10, 20, 30, 40, 50, 60, 70, 80, 90],
'c': [ 100, 200, 300, 400, 500, 600, 700, 800, 900],
'd': [1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000],
})
Я хочу как-то "разыменовать" столбец ref
, чтобы получить это:
'ref': [ 'a', 'b', 'c', 'd', 'c', 'b', 'a', 'b', 'c'],
'ind': [ 1, 20, 300, 4000, 500, 60, 7, 80, 900],
Итак, каждое значение в ind
должно соответствовать значению в столбце, помеченном ref
в той же позиции.
Наивным подходом было бы использовать что-то вроде df[df['ref']]
, затем умножить на единичную матрицу, а затем суммировать по столбцам. Но поскольку у меня есть довольно большой (~ 8 ГБ) массив данных, я думаю, что при его выполнении размер будет почти квадратным. И это просто нехорошо.
Также из-за размера, который просто повторяется, он мучительно медленный. И я не могу перебрать с Cython, потому что преобразование этого фрейма данных в массив numpy теряет информацию метки, которая мне нужна, чтобы правильно найти столбец.
Есть предложения? ..