У меня есть 3 различных фрейма данных, которые могут быть сгенерированы с использованием приведенного ниже кода
data_file= pd.DataFrame({'person_id':[1,2,3],'gender': ['Male','Female','Not disclosed'],'ethnicity': ['Chinese','Indian','European'],'Marital_status': ['Single','Married','Widowed'],'Smoke_status':['Yes','No','No']})
map_file= pd.DataFrame({'gender': ['1.Male','2. Female','3. Not disclosed'],'ethnicity': ['1.Chinese','2. Indian','3.European'],
'Marital_status':['1.Single','2. Married','3 Widowed'],'Smoke_status':['1. Yes','2. No',np.nan]})
hash_file = pd.DataFrame({'keys':['gender','ethnicity','Marital_status','Smoke_status','Yes','No','Male','Female','Single','Married','Widowed','Chinese','Indian','European'],'values':[21,22,23,24,125,126,127,128,129,130,131,141,142,0]})
И еще один пустой фрейм данных, в который должен быть заполнен вывод, может быть сгенерирован с использованием кода ниже
columns = ['person_id','obsid','valuenum','valuestring','valueid']
obs = pd.DataFrame(columns=columns)
То, чего я пытаюсь достичь, показано в таблице, где вы можете увидеть правила и описание порядка заполнения данных

Я пробовал использовать метод for loop loop, но как только я его разложил, я теряю имена столбцов и не уверен, что мне делать дальше.
a=1
for i in range(len(data_file)):
df_temp = data_file[i:a]
a=a+1
df_temp=df_temp.unstack()
df_temp = df_temp.to_frame().reset_index()
Как получить заполненный выходной кадр данных, как показано ниже (ps: я показал только для столбцов person_id = 1 и 4), но в реальном времени у меня более 25 тыс. Человек и400 колонок на каждого человека.Поэтому любой элегантный и эффективный подход полезен в отличие от моего цикла for.
