Как эффективно передавать значения в кадре данных? - PullRequest
1 голос
/ 19 октября 2019

Я хотел бы спросить, существует ли более эффективный способ передачи значений в пределах кадра данных, чем ввод всех ячеек по одному.

Предположим, существует набор ячеек (120, 50: 100) с определенными входами, в то время как есть другой набор пустых ячеек (0:50, 110). Оба набора ячеек имеют размер 50 * 1 (всего 50 ячеек), но с разным количеством столбцов и строк.

В этой ситуации я хотел бы выполнить два преобразования:

1-е преобразование:
Перенести входы в ячейках (120, 50: 100) в ячейки (0: 50, 110), так что ячейка (0, 110) = ячейка (120, 50), ячейка (1, 110) = ячейка (120, 51), ..., ячейка (49, 110) = ячейка (12099).

2-е преобразование:
Перенести входы в ячейках (120, 50: 100) в ячейки (0:50, 110), чтобы ячейка (0, 110) = ячейка (120, 99),ячейка (1, 110) = ячейка (120, 98), ..., ячейка (49, 110) = ячейка (120, 50)

Помимо непосредственного назначения требуемых значений с помощью команды df.iloc[a, b] = df.iloc[c, d]50 раз в каждом преобразовании, есть ли более эффективный способ выполнить преобразование выше. Большое спасибо.

1 Ответ

1 голос
/ 19 октября 2019

Замена с использованием iloc, т. Е. df.iloc[:50, 110] = df.iloc[120, 50:100], скорее всего, не будет работать, поскольку iloc в этом случае возвращает Series, а Series запоминает индексы (в данном случае имена столбцов). Оператор присвоения = в этом случае всегда заменяет элементы одного и того же индекса. Таким образом, поскольку индексы двух серий различны (df.iloc[:50, 110] имеет имена строк или индексы в качестве индексов, df.iloc[120, 50:100] имеет имена столбцов или индексы в качестве индексов), подстановка происходит неправильно.

Это можно увидеть, если вывыведите df.iloc[:50, 110].index и df.iloc[120, 50:100].index. Подстановка выполняется только в том случае, если эти индексы совпадают, что, скорее всего, не ваш случай.

Чтобы добиться того, что вы хотите, вы можете использовать базовый массив numpy, который не требует проверки индексов.

df.values[:50, 110] = df.values[120, 50:100]

и для изменения порядка назначения:

df.values[:50, 110] = df.values[120, 50:100:-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...