如何获取熊猫数据框中最小值之后的所有记录



如何获取所有记录(在最小值之后(

例如:最小值为 7,我想获取它之后的所有记录。

Date             Value    
2020-03-11       20 
2020-02-25       10
2020-02-20       7.5      
2020-02-15       7        
2020-01-10       10       
2019-12-07       15       

我试过了

min1=dfs[i].loc[dfs[i]['Value'] == dfs[i]['Value'].min()]['Date'].values[0]
dfs[i][min1:]

但这引发了一个错误 '类型错误:无法使用这些索引器执行切片索引 [2020-02-12T00:00:00.000000000] 的 '

注意:我有一个数据框列表。

您可以通过执行此操作获取第一个最小值之后的所有行

df.loc[df['Value'].idxmin():, ]

编辑:根据下面的注释获取最小值之后的行,不包括最小值df.loc[df['Value'].idxmin()+1:, ]

请注意,我假设索引是连续整数,如果不是,请重置索引。如果您的索引不是整数和非单调的,请检查下面的答案@Valdi_Bo

假设数据帧包含:

Date  Value
A1  2020-03-11   20.0
H2  2020-02-25   10.0
E3  2020-02-20    7.5
C4  2020-02-15    7.0
B5  2020-01-10   10.0
M6  2019-12-07   15.0

为了证明我的方法在所有可能的情况下都有效,我故意 选择非数字和非单调索引,但索引必须是唯一的。

请注意:

  1. idxm = df.Value.idxmin()以最小的值获取行的索引-C4.

  2. df.loc[:idxm].index检索索引的"初始"部分, 直到"最小"行(包括(-Index(['A1', 'H2', 'E3', 'C4'], dtype='object').

  3. df.index.difference(df.loc[:idxm].index)检索另一部分 的索引 -Index(['B5', 'M6'], dtype='object').

因此,这得出的结论是,正确的表达式是:

df.loc[df.index.difference(df.loc[:idxm].index)]

此表达式的结果为:

Date  Value
B5  2020-01-10   10.0
M6  2019-12-07   15.0

其他可能的解决方案:

df.loc[df.Value.shift().idxmin():]

你想用shift来获取移位的序列,然后与min进行比较:

df[df.Value.shift()==df.Value.min()]

输出:

Date  Value
4  2020-01-10   10.0

如果您只想获得Value

df.loc[df.Value.shift()==df.Value.min(), 'Value']

输出:

4    10.0
Name: Value, dtype: float64

最新更新