У меня есть два кадра данных, которые могут быть созданы с использованием кода, показанного ниже
df1 = pd.DataFrame({'home':[1,np.nan,2,np.nan,3,4],
'PERSONAL INFORMATION':['Study Number', 'Study ID','Age when interview
done', 'Derived using date of birth','Gender','ethnicity],
'VARIABLE':
['studyid','dummy','age_interview','dummy','gender','Chinese'],
'Remarks':[2000000001,20005000001,4265453,0,4135376,2345678]})

df2 = df2 = pd.DataFrame({'level_0': ['studyid','age_interview','gender','dobyear','ethderived','smoke','alcohol'],
'0':['tmp001', 56,'Female',1950,'Chinese','No', 'Yes']})

Цель
1) Моя цель - взять значения из 'level_0' столбца df2 и найти их в 'VARIABLE' столбец df1, чтобы получить их значение столбца 'Remarks' при условии, что оно удовлетворяет следующему условию
a) 'Home' column of df1 should contain digits as part of their value( Ex: 1,2,3,4,B1.5,C1.9, D1.2 etc are all valid values for 'Home' column)
2) Моя цель та же, что и выше, ноздесь я хотел бы взять значения из '0' столбца df2 и искать их в 'ЛИЧНАЯ ИНФОРМАЦИЯ' столбца df1, чтобы получить их 'Замечания' значение при условии, что оно удовлетворяет следующему условию
a) 'VARIABLE' column of df1 should contain 'dummy' as a value
Для вышеупомянутых двух сценариев я написал приведенный ниже код, но по какой-то причине я чувствую, что он довольно длинный / неэффективный.Должен быть простой способ сделать это.
Сценарий - 1
qconc_id = []
missed_items=[]
col_list=[]
for i in df7.index:
ques = df7['level_0'][i]
col_list.append(ques)
try:
qindex = int(df[df['VARIABLE']==ques].index[0]),
df.columns.get_loc('VARIABLE')
pos_qindex = qindex[0]
ques_value = df['home '][pos_qindex]
result = re.match(r"[A-Z]?[\d]?[\.]?[\d]+", ques_value)
while result is None:
pos_qindex = pos_qindex-1
ques_value = df['home '][pos_qindex]
result = re.match(r"[A-Z]?[\d]?[\.]?[\d]+", ques_value)
qconc_id.append(df['Remarks'][pos_qindex])
except:
missed_items.append(ans)
Сценарий - 2
aconc_id = []
missed_items=[]
ans_list=[]
for i in df7.index:
ans = df7[0][i]
print("ans is ",ans)
ans_list.append(ans)
idx=0
try:
aindex = df[df['PERSONAL
INFORMATION'].str.contains(ans,case=False,regex=False)].index
print(aindex)
pos_aindex = aindex[idx]
while (df['VARIABLE'][pos_aindex] !='dummy') and
(df['PERSONAL INFORMATION'].str.contains('Yes|No',regex=True)
[pos_aindex])==False):
pos_aindex = aindex[idx+1]
print("The value is ",df['Remarks'][pos_aindex])
aconc_id.append(df['Remarks'][pos_aindex])
except:
print("Goes to Exception")
aconc_id.append('0')
missed_items.append(ans)
Обратите внимание на эти две вещи
a) Я использовал цикл while, потому что значения могут повторяться.Например, у нас может быть соответствующее значение как «Нет», но df1 ['VARIABLE'] может не быть фиктивным.Поэтому я увеличиваю значения идентификаторов в обоих сценариях, чтобы определить, имеет ли следующее вхождение «Нет» значение «Пустышка» для столбца VARIABLE.То же самое относится и к сценарию 1
b) Как я могу обрабатывать сценарии, такие как «Нет», когда находит совпадения в «Заметках», «Nocase».Как вы можете видеть из моего кода, что я использую регулярное выражение, но он все еще сталкивается с ошибкой здесь.
Как видите, я делаю некоторые изменения в коде и пишу его дважды.Как я могу сделать это элегантно и эффективно?Я уверен, что должен быть очень легкий и простой способ сделать это.
Также приветствуются любые предложения / идеи относительно альтернативного подхода к изменению формата данных исходных данных или использованию подхода слияния / объединения.
Я ожидаю, что вывод, значение «Замечания» будет сохранено в списке.Пожалуйста, найдите скриншот того, что я сделал
