Эффективное заполнение кадра данных панд с использованием двумерного массива - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть двумерный массивный массив, каждая строка которого состоит из трех элементов - ['dataframe_column_name', 'dataframe_index', 'value'].Теперь я попытался заполнить фрейм данных pandas с помощью iloc double for loop, но это довольно медленно.Есть ли более быстрый способ сделать это.Я немного новичок в пандах, поэтому извиняюсь, если это что-то очень простое.Вот фрагмент кода:

my_nparray = [['a', 1, 123], ['b', 1, 230], ['a', 2, 321]]
for r in range(my_nparray.shape[0]):
    [col, ind, value] = my_nparray[r]
    df.iloc[col][ind] = value

Это занимает много времени, когда my_nparray большой, есть ли другой способ сделать это?

Сначала предположим, что я могу создать этот фрейм данных:

  'a' 'b'
1 NaN NaN
2 NaN NaN

Я хочу вывод как:

  'a' 'b'
1 123 230
2 321 NaN

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Используйте DataFrame конструктор с DataFrame.pivot и DataFrame.rename_axis:

df = pd.DataFrame(my_nparray).pivot(1,0,2).rename_axis(index=None, columns=None)
print (df)
       a      b
1  123.0  230.0
2  321.0    NaN
0 голосов
/ 10 февраля 2019

Вы можете использовать from_records, а затем pivot:

df = pd.DataFrame.from_records(my_nparray, index=1).pivot(columns=0)

       2
0      a      b
1
1  123.0  230.0
2  321.0    NaN

Это указывает, что индекс использует поле 1 из вашего массива иСводка использует Series 0 для столбцов.

Затем мы можем сбросить MultiIndex для столбцов и индекса:

df.columns = df.columns.droplevel(None)
df.columns.name = None
df.index.name = None

       a      b
1  123.0  230.0
2  321.0    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...