基于另一个数据帧中的行选择一个数据帧中的行

2024-04-24 00:28:36 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个非常大的数据帧dfBig和列Param1, Param2, ..., ParamN, score, step,还有一个较小的数据帧dfSmall和列Param1, Param2, ..., ParamN(即缺少scorestep列)。你知道吗

我想选择dfBig中列Param1, Param2, ..., ParamN的值与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)指定的。我想查询dfBig并获得一段时间内具有Arch A和Arch B的最佳性能模型的得分时间序列

按照EdChum下面的回答,我认为最好的解决办法是按程序做这样的事情:

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)

由此产生:

Arch  | Layers | Score | Time
A     | 1      | 0.3   | 10
A     | 1      | 0.6   | 20
A     | 1      | 0.7   | 30
B     | 2      | 0.7   | 10
B     | 2      | 0.8   | 20
B     | 2      | 0.8   | 30

如果有更好的办法,我很高兴听到。你知道吗


Tags: 数据模型timelayersstepcolparam1score
1条回答
网友
1楼 · 发布于 2024-04-24 00:28:36

如果我正确理解您的问题,您应该能够调用mergeon dfBig并传递dfSmall,它将在对齐的列中查找匹配项,并且只返回那些行。你知道吗

示例:

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

相关问题 更多 >