Инвертировать значения строк в кадре данных

1

Если у меня есть кадр данных pandas:

 NaN  2   3  1  7  NaN  4
  5  NaN NaN 2  8   0   3
 NaN NaN NaN 4  7   9   3

и массив вроде этого:

 [3, -5, 4]

Как инвертировать столбцы фрейма данных pandas в строках с отрицательным значением массива? Так что я получаю что-то вроде этого:

 NaN  2   3  1  7  NaN  4
  3   0   8  2 NaN NaN  5
 NaN NaN NaN 4  7   9   3
  • 1
    Я должен сказать, что я не отвечаю на этот вопрос интервью; шаблон замены выглядит довольно случайным для меня.
Теги:
pandas
python-2.7

3 ответа

0

Здесь фиктивный фрейм:

df = pd.DataFrame(data=np.random.randint(-1, 10,size = (10, 7)), columns = ['a', 'b', 'c', 'd', 'e', 'f', 'g'])
df

   a    b   c   d   e   f   g
0   5   2   3   -1  5   7   0
1   1   9   1   6   1   3   6
2   1   1   7   4   -1  2   3
3   1   7   5   5   6   3   3
4   3   7   8   8   1   0   9
5   9   9   1   6   9   0   4
6   0   5   1   5   7   1   -1
7   4   4   8   7   7   3   1
8   5   -1  9   9   1   1   5
9   9   3   2   3   -1  3   0

Если вы хотите обратный индекс 8:

df.loc[8] = df.loc[8][::-1].values
df
   a    b   c   d   e   f   g
0   5   2   3   -1  5   7   0
1   1   9   1   6   1   3   6
2   1   1   7   4   -1  2   3
3   1   7   5   5   6   3   3
4   3   7   8   8   1   0   9
5   9   9   1   6   9   0   4
6   0   5   1   5   7   1   -1
7   4   4   8   7   7   3   1
8   5   1   1   9   9   -1  5
9   9   3   2   3   -1  3   0
0

Я считаю, что вам нужно numpy.where с широковещательной булевой маской для отрицательных чисел списка с обратными значениями путем индексирования:

L = [3, -5, 4]
mask = np.array(L)[:, None] < 0
df = pd.DataFrame(np.where(mask, df.values[:, ::-1], df.values),
                  index=df.index,
                  columns=df.columns)
print (df)
     0    1    2    3    4    5    6
0  NaN  2.0  3.0  1.0  7.0  NaN  4.0
1  3.0  0.0  8.0  2.0  NaN  NaN  5.0
2  NaN  NaN  NaN  4.0  7.0  9.0  3.0
0

Предположим, вы хотите изменить вторую строку. Сделайте это на основе вашего состояния.

df.iloc[1] = df.iloc[1].tolist()[::-1]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню