У меня есть два кадра данных, как показано ниже
df_input df_output
id POLL_X POLL_Y POLL_Z .. id Pass_01 Pass_02 Pass_03 .....
110101 1 2 4 110101
110102 2 1 3 110102
, и требуется заполнить df_ouput на основе значения в df_input
df_input df_output
id POLL_X POLL_Y POLL_Z .... id Pass_01 Pass_02 Pass_03 .....
110101 1 2 3 110101 X Y Z
110102 2 1 3 110102 Y X Z
, поэтому в основном это значение столбца из df_input будет значением ячейки в df_output при совпадении и на основе df_input.id == df_output.id
Я пытался, как показано ниже
def function1(df_input, number):
dfwithCols = df_input[df_input.columns[pd.Series(df_input.columns).str.startswith('POLL_')]]
list_cols = dfwithCols .columns[(dfwithCols == float(number)).iloc[0]]
colValue = (dfReduced == float(index)).idxmax(axis=1)[0]
return colValue
- функция драйвера ---
for i in range(1,number_of_columnswithPass):
df_output['Pass_'+i] = function1(df_input,i)
number_of_columnsiwthPass является константой, которая дает общее количество столбцов с именем в качестве прохода.
Также я не могу перебрать каждую строку, так как это займет огромное время, приходится делать это на основе столбцов или лямбда-выражений на основе
есть другие столбцы в обоих фреймах данных, также df_input.id == df_output.id должен соответствовать
Общее количество столбцов может быть около 40, некоторые тестовые значения включают POLL_DNW, POLL_DO, POLL_DOES, POLL_SIG: 2
, поэтому я должен взять все, что есть после '_' и номеров столбцов, таких как 01,02,03,04 ---- 10,11, - 21, --- 39,40