我们假设我有一个非常大的pandas DataFrame dfBig
列Param1, Param2, ..., ParamN, score, step
,以及一个较小的DataFrame dfSmall
列Param1, Param2, ..., ParamN
(即错过了{ {1}}和score
列。)
我想选择step
的所有行,dfBig
列的值与Param1, Param2, ..., ParamN
中某些行的值匹配。在熊猫中有这种干净的方法吗?
修改:举一个示例,请考虑此DataFrame dfSmall
:
dfBig
让我们想象一个模型由一对Arch | Layers | Score | Time
A | 1 | 0.3 | 10
A | 1 | 0.6 | 20
A | 1 | 0.7 | 30
A | 2 | 0.4 | 10
A | 2 | 0.5 | 20
A | 2 | 0.6 | 30
B | 1 | 0.1 | 10
B | 1 | 0.2 | 20
B | 1 | 0.7 | 30
B | 2 | 0.7 | 10
B | 2 | 0.8 | 20
B | 2 | 0.8 | 30
指定。我想查询(Arch, Layers)
并获得Arch A和Arch B表现最佳的模型随时间推移的时间序列。
按照EdChum的回答,我认为最好的解决方案是在程序上做这样的事情:
dfBig
产生:
modelColumns = [col for col in dfBigCol if col not in ["Time", "Score"]]
groupedBest = dfBig.groupby("Arch").Score.max()
dfSmall = pd.DataFrame(groupedBest).reset_index()[modelColumns]
dfBest = pd.merge(dfSmall, dfBig)
如果有更好的方法,我很高兴听到它。
答案 0 :(得分:1)
如果我正确理解了您的问题,您应该只需在merge
上调用dfBig
并传递dfSmall
,这将在对齐的列中查找匹配项,并仅返回这些行。< / p>
示例:
In [71]:
dfBig = pd.DataFrame({'a':np.arange(100), 'b':np.arange(100), 'c':np.arange(100)})
dfSmall = pd.DataFrame({'a':[3,4,5,6]})
dfBig.merge(dfSmall)
Out[71]:
a b c
0 3 3 3
1 4 4 4
2 5 5 5
3 6 6 6