如何在Pandas DataFrame中的特定列获取带有最小值的行?

时间:2019-04-11 19:14:04

标签: python pandas

我的DataFrame是:

                                               model  epochs       loss
0  <keras.engine.sequential.Sequential object at ...       1  0.0286867
1  <keras.engine.sequential.Sequential object at ...       1  0.0210836
2  <keras.engine.sequential.Sequential object at ...       1  0.0250625
3  <keras.engine.sequential.Sequential object at ...       1   0.109146
4  <keras.engine.sequential.Sequential object at ...       1   0.253897

我想获得loss最低的行。

我正在尝试self.models['loss'].idxmin(),但这会导致错误: TypeError: reduction operation 'argmin' not allowed for this dtype

3 个答案:

答案 0 :(得分:1)

@TestMethodOrder(OrderAnnotation.class)
@SpringJUnitWebConfig(locations = { "classpath:service.xml","classpath:data.xml" })
@Tag("1")
public class MyTestTest {
@Autowired
protected CreateUser createUser;

@BeforeEach
public void setUp() throws Exception {
createUser.createTimesheetUser(...)} --> works now
}

将使该行的损失最小(只要self.models是您的df)。添加.index以获取索引号。

答案 1 :(得分:1)

希望这行得通

import pandas as pd
df = pd.DataFrame({'epochs':[1,1,1,1,1],'loss':[0.0286867,0.0286867,0.0210836,0.0109146,0.0109146]})
out = df.loc[df['loss'].idxmin()]

答案 2 :(得分:1)

有很多方法可以做到这一点:

考虑此示例数据框

df

level    beta
0   0   0.338
1   1   0.294
2   2   0.308
3   3   0.257
4   4   0.295
5   5   0.289
6   6   0.269
7   7   0.259
8   8   0.288
9   9   0.302

1)使用熊猫条件

df[df.beta == df.beta.min()]  #returns pandas DataFrame object

level   beta
3   3   0.257

2)使用sort_values并选择第一个(第0个)索引

df.sort_values(by="beta").iloc[0]    #returns pandas Series object

level        3
beta     0.257
Name: 3, dtype: object

我猜这些是最易读的方法

编辑:

制作此图以可视化以上两种方法在增加no上花费的时间。数据框中的行数。尽管它很大程度上取决于所讨论的数据帧,但是当行数大于或等于1000左右时,sort_values的速度要比有条件的要快得多。

Time taken by sort_values and conditional vs no of rows in the dataframe