我有这个数据框。

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))

10-06 05:19
查看更多