Python:按值范围拆分pandas数据帧



我有一个简单的数据帧,我试图根据x列值是否在一个范围内将其拆分为多个组。

例如,如果我有:

print(df1)
x
0 5
1 7.5
2 10
3 12.5
4 15

并且希望创建x值在7-13(7<x<13(范围内的新数据帧df2

print(df1)
x   
0 5
4 15
print(df2)
x
1 7.5
2 10
3 12.5

我已经能够基于单个值布尔值来分割数据帧,例如(x<11(,使用以下方法,但无法将其开发为范围的值。

thresh = 11
df2 = df1[df1['x'] < thresh]
print(df2)
x
0 5
1 7.5
2 10

您可以通过(x>7(和(x<13(的AND条件为范围(7<x<13(创建布尔掩码。然后用这个布尔掩码创建df2df1中剩下的条目是此布尔掩码的否定项:

thresh_low = 7
thresh_high = 13
mask = (df1['x'] > thresh_low) & (df1['x'] < thresh_high)
df2 = df1[mask]
df1 = df1[~mask]

结果:

print(df2)
x
1   7.5
2  10.0
3  12.5

print(df1)
x
0   5.0
4  15.0

您可以使用between对条件是否满足进行分类,然后根据您的条件分组进行拆分。在这里,我将结果存储在dict

d = dict(tuple(df1.groupby(df1['x'].between(7, 13, inclusive=False))))
d[True]
#      x
#1   7.5
#2  10.0
#3  12.5
d[False]
#      x
#0   5.0
#4  15.0

或者只有两种可能的拆分,您可以手动定义布尔级数,然后根据它进行拆分。

m = df1['x'].between(7, 13, inclusive=False)
df_in = df1[m]
df_out = df1[~m]