Панды самый эффективный способ присвоения последовательности значений конкретным позициям - PullRequest
1 голос
/ 22 октября 2019

У меня есть пустой кадр данных pandas (df), список пар (индекс, столбец) (pair_list) и список соответствующих значений (value_list). Я хочу присвоить значение в value_list соответствующей позиции в df в соответствии с pair_list. В настоящее время я использую следующий код, но он медленный. Есть ли более быстрый способ сделать это?

import pandas as pd
import numpy as np

df = pd.DataFrame(index=[0,1,2,3], columns=['a', 'b','c','d'])
pair_list = [(0,'a'),(1,'c'),(0,'d')]
value_list = np.array([3,2,4])
for pos, item in enumerate(pair_list):
    df.at[item] = value_list[pos]

Вывод кода должен быть:

     a    b    c    d
0    3  NaN  NaN    4
1  NaN  NaN    2  NaN
2  NaN  NaN  NaN  NaN
3  NaN  NaN  NaN  NaN

1 Ответ

2 голосов
/ 22 октября 2019

Одна из идей - создать MultiIndex с помощью MultiIndex.from_tuples, затем создать Series, изменить его на Series.unstack и добавить отсутствующие столбцы, значения индекса на DataFrame.reindex:

pair_list = [(0,'a'),(1,'c'),(0,'d')]
value_list = np.array([3,2,4])
mux = pd.MultiIndex.from_tuples(pair_list)

cols = ['a', 'b','c','d']
idx = [0,1,2,3]
df = pd.Series(value_list, index=mux).unstack().reindex(index=idx, columns=cols)
print (df)
     a   b    c    d
0  3.0 NaN  NaN  4.0
1  NaN NaN  2.0  NaN
2  NaN NaN  NaN  NaN
3  NaN NaN  NaN  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...