我有两个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循环来做到这一点,但这不是我想要的。 我可以通过列表理解来做到这一点吗?如果可以,怎么办?
答案 0 :(得分:1)
如果我理解正确,则可以使用以下列表理解:
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)
答案 1 :(得分:1)
您可以使用地图而无需循环
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