pandas DataFrame: заменить значения в нескольких столбцах значением из другого - PullRequest
0 голосов
/ 11 ноября 2019

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

Я сделал следующее:

df[cols[23:30]] = df[cols[23:30]].apply(lambda x: x.replace(99, df['col1']))
df[cols[30:36]] = df[cols[30:36]].apply(lambda x: x.replace(99, df['col2']))
  • cols - это список с именами столбцов.
  • 99 считается отсутствующим значением, которое я хочу заменить на (уже рассчитанное) среднее значение для данного класса (т. Е. В зависимости от col1 или col2). на выбор)

Это работает, но время, необходимое для замены всех этих значений, кажется, занимает больше времени, чем необходимо. Я полагал, что должен быть более быстрый (в вычислительном отношении) способ достижения того же самого.

Есть предложения?

1 Ответ

0 голосов
/ 11 ноября 2019

Вы можете попробовать:

import numpy as np

df[cols[23:30]] = np.where(df[cols[23:30]] == 99, df[['col1'] * (30-23)], df[cols[23:30]])

df[cols[30:36]] = np.where(df[cols[30:36]] == 99, df[['col2'] * (36-30)], df[cols[30:36]])

df[["col1"] * n] создаст кадр данных с точно таким же столбцом, повторенным n раз, поэтому numpy может использовать его в качестве маски для n столбцов, которые вы хотите перебратьесли встречается 99, в противном случае принимается соответствующее значение, которое уже есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...