لحل هذه المشكلة، يمكنك استخدام لغة البرمجة Python ومكتبة pandas لمعالجة البيانات. يمكنك استخدام الكود التالي:
pythonimport pandas as pd
# البيانات الأولى
data1 = {
'col1': ['O75663', 'O95400', 'O95433', '', '', ''],
'col2': ['O95456', 'O95670', '', 'O95456', 'O95670', ''],
'col3': ['O75663', 'O95400', 'O95433', 'O95456', '', ''],
'col4': ['', 'O95670', 'O95801', 'P00352', '', '']
}
df1 = pd.DataFrame(data1)
# البيانات الثانية
data2 = {
'strings': ['O75663', 'O95400', 'O95433', 'O95456', 'O95670', 'O95801', 'P00352', 'P00492']
}
df2 = pd.DataFrame(data2)
# تحويل القيم الفارغة إلى NaN
df1 = df1.replace('', pd.NA)
# تحويل كل قيمة في df1 إلى مجموعة متعددة (set) تحتوي على العمود الذي يحتوي عليها
cols = df1.applymap(lambda x: {col for col in df1.columns if x in df1[col]})
# الحلقة التي تبحث عن القيم في df2 في كل مجموعة من العمود في df1
matches = df2['strings'].apply(lambda x: ','.join(str(idx) for idx, col_set in cols.items() if x in col_set.values))
# إنشاء إطار بيانات جديد للنتائج
result = pd.DataFrame({
'strings': df2['strings'],
'column_ids': matches.replace('', 'NA')
})
print(result)
هذا الكود يعمل على إنشاء إطار بيانات جديد (result
) يحتوي على عمودين، الأول للسلاسل من البيانات الثانية والثاني للمؤشرات (index) للعمود الذي يتواجد فيه كل سلسلة من البيانات الثانية في البيانات الأولى.
المزيد من المعلومات
بالطبع، يمكنني توضيح المزيد من المعلومات حول الكود السابق:
-
يتم تمثيل البيانات الأولى في DataFrame
df1
، حيث يحتوي كل عمود على سلسلة من القيم، ويتم تمثيل البيانات الثانية في DataFramedf2
، حيث يحتوي عمود واحد على سلسلة من القيم. -
يتم استبدال القيم الفارغة في
df1
بقيمةpd.NA
التي تمثل قيمة غير متوفرة. -
يتم استخدام دالة
applymap
لتطبيق دالة على كل خلية فيdf1
. الدالة المستخدمة هنا تبني مجموعة من الأعمدة التي تحتوي على السلسلة في كل خلية. -
يتم استخدام الحلقة
apply
لتطبيق دالة على كل سلسلة فيdf2
. الدالة المستخدمة هنا تبحث عن السلسلة في كل مجموعة من الأعمدة فيdf1
وتجمع المؤشرات لكل سلسلة. -
يتم إنشاء إطار بيانات جديد
result
يحتوي على السلسلة منdf2
والمؤشرات المجمعة لكل سلسلة. -
يتم طباعة
result
لعرض النتائج.