我有这个数据框。
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))