Если у меня есть кадр данных 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
Здесь фиктивный фрейм:
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
Я считаю, что вам нужно 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
Предположим, вы хотите изменить вторую строку. Сделайте это на основе вашего состояния.
df.iloc[1] = df.iloc[1].tolist()[::-1]