Перезаписать значение фрейма данных

#python #pandas #dataframe #numpy

#питон #панды #фрейм данных #тупица

Вопрос:

У меня есть два фрейма данных df и ddff

фрейм данных df имеет 3 строки и 5 столбцов

 import pandas as pd import numpy as np df = pd.DataFrame(np.array([[0,1,0,0,1], [1,0,0,1,0], [0,1,1,0,0]])) df   0 1 2 3 4 0 0 1 0 0 1 1 1 0 0 1 0 2 0 1 1 0 0  

фрейм данных ddff состоит из соседних столбцов определенных столбцов, которые имеют 5 строк и 3 столбца, где значение фрейма данных ddff представляет имя столбца df

 ddff = pd.DataFrame(np.array([[3,2,1], [4,2,3], [3,1,4], [4,1,2], [2,3,1]])) ddff   0 1 2 0 3 2 1 1 4 2 3 2 3 1 4 3 4 1 2 4 2 3 1  

Теперь мне нужен окончательный фрейм данных, в котором для соседнего столбца df установлено значение 1 (перезаписать предыдущее значение)

ожидаемый результат

 0 1 2 3 4 0 0 1 1 1 0 1 1 0 0 1 0 2 0 1 1 0 0  

Комментарии:

1. «значение соседнего столбца df равно 1 (перезаписать предыдущее значение)» что это значит? Что вы подразумеваете под «соседом»?

2. Мне нужно изменить значения строки 0 фрейма данных df на основе фрейма данных ddff. строка 0 фрейма данных ddff состоит из значений [3,2,1], теперь, если столбцы 3, 2 и 1 фрейма данных df имеют значение 0, установите его равным 1

3. А для строки 1, 2, 3, 4 ddff?

4. пока в этом нет необходимости, сэр

5. значит, значение имеет только строка 0? тогда вы можете использовать df.loc[0, ddff.loc[0]] = 1

Ответ №1:

Вы можете отфильтровать соответствующие номера столбцов ddff и установить значения в этих столбцах в первой строке равными 1 , а значения в остальных столбцах равными 0:

 relevant_columns = ddff.loc[0] df.loc[0,relevant_columns] = 1 df.loc[0,df.columns[~df.columns.isin(relevant_columns)]] = 0  

Выход:

 0 1 2 3 4 0 0 1 1 1 0 1 1 0 0 1 0 2 0 1 1 0 0  

Ответ №2:

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

 s = ddff.loc[0].values df.loc[0] = np.where(df.loc[[0]].columns.isin(s),1,0)  gt;gt;gt; df   0 1 2 3 4 0 0 1 1 1 0 1 1 0 0 1 0 2 0 1 1 0 0  

Сломать его:

 gt;gt;gt; np.where(df.loc[[0]].columns.isin(s),1,0) array([0, 1, 1, 1, 0])  # Before the update gt;gt;gt; df.loc[0]  0 0 1 1 2 0 3 0 4 1   # After the assignment back 0 0 1 1 2 1 3 1 4 0