У меня есть пандас, состоящий из сотен столбцов и миллионов строк.Мне нужно назначить значения для определенных ячеек по индексам столбцов различий для каждой строки.
Я пробовал петли и метод .apply в пандах, ни один из них не достаточно быстр.Поэтому мне нужно знать векторизованный способ сделать это.
Прежде всего, у меня есть серия списков панд.Это выглядит так.
0 [116, 117, 118, 120, 121, 122, 125, 126]
1 [116, 117, 118, 120, 121, 122, 123, 124, 125]
...
Вы можете видеть, что в этой серии каждый элемент представляет собой список, состоящий из индексов.Эти элементы в серии не идентичны. Это означает, что если я буду использовать эти индексы в качестве индексов столбцов для присвоения значений, каждой строке будут присвоены ячейки в разных позициях.И это то, что я хочу.
И значения, которые должны быть назначены ячейкам, также сохраняются в серии списков панд, которые выглядят следующим образом:
0 [value1, value2, value3, value4, value5, value6, value7]
1 [value1,value2,value3,value4,value5,value6,value7,value8,value9]
...
Как вы можете видеть, списки значений соответствуютдлина с индексными списками.Ряды, содержащие списки значений и ячейки, которые необходимо заполнить, находятся в одном и том же фрейме данных pandas.
Итак, я попробовал это:
def fill_rows(row, *args):
row[row[index_column_index]] = row[value_column_index]
df.apply(fill_rows)
Это работает, но медленно.(Не так быстро, как я ожидал для нескольких миллионов строк)
Поэтому мне интересно, есть ли способ сделать такие вещи:
df[array_of_index_lists] = df[value_column_index]
Это векторизованный способ индексации различныхячеек в каждой строке и присваивает им значения, используя соответствующие значения в другом столбце.Очень ценится.