#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