如何获取所有记录(在最小值之后(
例如:最小值为 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
为了证明我的方法在所有可能的情况下都有效,我故意 选择非数字和非单调索引,但索引必须是唯一的。
请注意:
idxm = df.Value.idxmin()
以最小的值获取行的索引值-C4
.df.loc[:idxm].index
检索索引的"初始"部分, 直到"最小"行(包括(-Index(['A1', 'H2', 'E3', 'C4'], dtype='object')
.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