根据另一个

时间:2015-05-12 10:39:52

标签: python pandas

我们假设我有一个非常大的pandas DataFrame dfBigParam1, Param2, ..., ParamN, score, step,以及一个较小的DataFrame dfSmallParam1, 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)

如果有更好的方法,我很高兴听到它。

1 个答案:

答案 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