查找数据框中特定值之间的所有值

Finding all values in between specific values in data frame

我有这个数据框。

df

  name  timestamp  year
0    A       2004  1995
1    D       2008  2004
2    M       2005  2006
3    T       2003  2007
4    B       1995  2008
5    C       2007  2003
6    D       2005  2001
7    E       2009  2005
8    A       2018  2009
9    L       2016  2018

我所做的是基于 df['timestamp'] 中的前两个条目。我正在从这两个条目之间的 df['year'] 中获取所有值。在这种情况下是 (2004-2008)。

y1 = df['timestamp'].iloc[0]
y2 = df['timestamp'].iloc[1]
movies = df[df['year'].between(y1, y2,inclusive=True )] 
movies 

  name  timestamp  year
1    D       2008  2004
2    M       2005  2006
3    T       2003  2007
4    B       1995  2008
7    E       2009  2005

这对我来说很好用。但是当我在第一个索引中具有更大的值而在第二个索引中具有更低的值(例如 2008-2004)时,结果为空。

df

  name  timestamp  year
0    A       2008  1995
1    D       2004  2004
2    M       2005  2006
3    T       2003  2007
4    B       1995  2008
5    C       2007  2003
6    D       2005  2001
7    E       2009  2005
8    A       2018  2009
9    L       2016  2018

在这种情况下,我什么也拿不到。

预期结果: 我想要的是,如果值更大或更小,我应该每次都获得中间值。

您只需更改两行代码即可解决此问题:

y1 = min(df['timestamp'].iloc[0], df['timestamp'].iloc[1])
y2 = max(df['timestamp'].iloc[0], df['timestamp'].iloc[1])

这样 y1 总是小于或等于 y2

然而,正如@ALollz 指出的那样,使用

可以节省计算和编码时间
y1,y2 = np.sort(df['timestamp'].head(2))

您可以使用 Series.head and Series.agg:

y1, y2 = df['timestamp'].head(2).agg(['min', 'max'])
movies = df[df['year'].between(y1, y2,inclusive=True )]

[出局]

  name  timestamp  year
1    D       2004  2004
2    M       2005  2006
3    T       2003  2007
4    B       1995  2008
7    E       2009  2005