我有一个简单的数据框,我试图根据 x 列值是否在一个范围内将其分成多个组。
例如如果我有:
print(df1)
x
0 5
1 7.5
2 10
3 12.5
4 15
并希望创建一个新的数据框 df2,其中 x 的值在 7-13 (7 < x < 13) 范围内
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
答案 0 :(得分:2)
您可以通过 (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
答案 1 :(得分:1)
您可以使用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]