繁体   English   中英

根据另一个DataFrame中的行选择一个DataFrame中的行

[英]Select rows in one DataFrame based on rows in another

假设我有一个非常大的熊猫DataFrame dfBig具有Param1, Param2, ..., ParamN, score, step和一个较小的DataFrame dfSmall具有Param1, Param2, ..., ParamN (即缺少scorestep列)。

我想选择dfBig所有行,以使其Param1, Param2, ..., ParamN列的值与Param1, Param2, ..., ParamN中某一行的值dfSmall 有没有在熊猫中这样做的干净方法?

编辑:举个例子,考虑一下这个DataFrame 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并获取时间序列的时间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

如果有更好的方法可以做到这一点,我很高兴听到。

如果我正确理解了您的问题,您应该能够在dfBig上调用merge并传递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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM