Подмножество dataframe внутри понимания списка - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть два pandas.DataFrame, которые разделяют некоторые столбцы.Я хочу добавить данные из одного на основе общей информации в другом.Проблема в том, что это довольно большие наборы данных, и мне нужно будет запустить эти строки несколько раз с несколькими парами таблиц.По этой причине это должно быть довольно быстро.Мой фрейм данных выглядит так:

import pandas as pd

mat = pd.DataFrame({'ID':[1,2,3,4,5],'OTHER_ID':[6,7,8,9,10]})
sess= pd.DataFrame({'ID':[11,12,13,14,15],'MAT_ID':[6,7,8,1,2]})

Я могу делать то, что хочу, используя карту, например:

sess['NEWCOLUMN']=list(map(lambda x:mat[mat['ID']==x]['OTHER_ID'],sess['MAT_ID']))

, но я хотел бы сделать это с пониманием списка, так как этоБыстрее.Вот что я пробовал:

sess['NEWCOLUMN']=[x for x in sess['MAT_ID'] mat[mat['ID']==x]['OTHER_ID']]

однако я получил синтаксическую ошибку.Я знаю, что могу сделать это с помощью обычного цикла for, но это не то, что я ищу.Могу ли я сделать это с помощью понимания списка, и если да, то как?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Вы можете использовать карту без петли

sess['NEWCOLUMN'] = sess['MAT_ID'].map(mat.set_index('OTHER_ID').ID)


    ID  MAT_ID  NEWCOLUMN
0   11  6       1.0
1   12  7       2.0
2   13  8       3.0
3   14  1       NaN
4   15  2       NaN
0 голосов
/ 31 декабря 2018

Если я правильно понял, вы могли бы использовать следующее понимание списка:

import pandas as pd

mat = pd.DataFrame({'ID':[1,2,3,4,5],'OTHER_ID':[6,7,8,9,10]})
sess= pd.DataFrame({'ID':[11,12,13,14,15],'MAT_ID':[6,7,8,1,2]})

sess['NEWCOLUMN']= [mat[mat['ID']==x]['OTHER_ID'] for x in sess['MAT_ID']]
print(sess)
...