查找数据框中特定值之间的所有值
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
我有这个数据框。
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