我有一个简单的数据帧,我试图根据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(创建布尔掩码。然后用这个布尔掩码创建df2
。df1
中剩下的条目是此布尔掩码的否定项:
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]