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

问题描述 投票:2回答:2

我有这个数据框。

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

在这种情况下,我什么也没得到。

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

python pandas dataframe between
2个回答
5
投票

您可以通过仅更改两行代码来解决此问题:

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

4
投票

您可以使用Series.headSeries.head

Series.agg

[out]

Series.agg
© www.soinside.com 2019 - 2024. All rights reserved.