Найдите значение из фрейма данных в другом фрейме данных и распечатайте строку (Python)

#python #pandas #dataframe #numpy #iteration

#python #pandas #фрейм данных #numpy #итерация

Вопрос:

Я уже задавал подобный вопрос раньше, но подумал, что было бы лучше сформулировать его по-другому. Например, у меня есть фрейм данных соединений, присвоенных числу, следующим образом:

соединение, число
17alpha_beta_SID_24898755,8
2_prolinal_109328,3
4_chloro_4491,37
5HT_144234_01,87
5HT_144234_02,2
6-OHDA_153466,23

Кроме того, существует другой фрейм данных с другими свойствами, а также составными именами, но не только с соответствующими номерами, есть строки, в которых составные имена присваиваются разным номерам — эти случаи, когда есть различия, не представляют интереса:

rmsd, chemplp, plp,соединение, число
1.00,14.00, -25.00,17alpha_beta_SID_24898755,7
0.38,12.00, -19.00,17alpha_beta_SID_24898755,8
0.66,16.00, -25.6,17alpha_beta_SID_24898755,9
0.87,24.58, -38.35,2_prolinal_109328, 3
0,17,54,58,-39,32,2_пролина_109328,4
0,22,22,58, -32,35,2_пролина_109328,5
0,41,45,32,-37,90,4_хлоро_4491,37
0,11,15,32,-37,10,4_хлоро_4491,38
0,11,15,32,-17,90,4_хлоро_4491,39
0,61,38,10, -45,86,5HT_144234_01,85
0,62,18,10, -15,86,5HT_144234_01,86
0,64,28,10, -25,86 ,5HT_144234_01,87
0,64,16,81,-10,87,5HT_144234_02,2
0,14,16,11,-10.17,5HT_144234_02,3
0.14,16.21,-10.17,5HT_144234_02,4
0.15,31.85,-24.23,6- О_ДА_153466,23
0.13,21.85,-34.23,6- О_ДА_153466,24
0.11,11.85,-54.23,6- OHDA_153466,25

Проблема в том, что я хочу найти каждое соединение и соответствующий ему номер из фрейма данных 1 в фрейме данных 2 и вернуть всю его строку.

Я смог сделать только это (но из-за того, как в этом случае выполняется итерация, это не работает для того, что я намереваюсь): импорт numpy как np импорт csv импорт pandas как pd

     for c1,n1,c2,n2 in zip(df1.compound,df1.number,df2.compound,df2.number):

            if c1==c2 and n1==n2:

                   print(df2[*])
 
  • Я хотел напечатать всю строку, в которой c1 == c2 и n1 == n2.

Пример: для 17alpha_beta_SID_24898755 (составной) 8 (его номер) в фрейме данных 1 верните строку, в которой это соединение и это число найдены в фрейме данных 2. Результат должен быть:

0.38,12.00,-19.00,17alpha_beta_SID_24898755,8

Я хотел бы сделать это для всех соединений и соответствующих им чисел из фрейма данных1. Приведенный мной пример был лишь небольшим набором из чрезвычайно обширного списка. Если кто-нибудь может помочь, спасибо!

Ответ №1:

Взгляните на df.merge метод:

 df1.merge(df2, on=['compound', 'number'], how='inner')
 

Комментарии:

1. Убедитесь, что этот ответ отмечен как правильный, если он помог 🙂