Python:按值范围拆分熊猫数据框

时间:2021-05-26 19:30:56

标签: python pandas dataframe pandas-groupby

我有一个简单的数据框,我试图根据 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

2 个答案:

答案 0 :(得分:2)

您可以通过 (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

答案 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]
相关问题