Python 列表理解中的子集数据帧

Python 列表理解中的子集数据帧,python,pandas,list-comprehension,Python,Pandas,List Comprehension,我有两个熊猫。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]})

我有两个
熊猫。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']))
我可以使用map做我想做的事情,如下所示:

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循环来实现,但这不是我想要的。
我可以通过列表理解来做到这一点吗?如果可以,如何做到?

如果我理解正确,您可以使用以下列表理解:

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)

如果我理解正确,您可以使用以下列表:

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)

您可以使用无循环的映射

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

您可以使用无循环的映射

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

“NEWCOLUMN”是否作为系列?@DanielMesejo可以是列表或系列,只要我可以在数据框中追加,我就不在乎。“NEWCOLUMN”是否作为系列?@DanielMesejo可以是列表或系列,只要我可以在数据框中追加,我就不在乎。工作得很有魅力!非常感谢。工作得很有魅力!非常感谢。