根据条件对变量进行分组

时间:2019-11-14 15:05:32

标签: python loops dataframe group-by conditional-statements

将以下数据分为64组。每个对象都有两个变量x和y。我想根据条件将它们分组。 x和y的范围都在0到2000之间,我想将它们分为64组。第一个具有x <250和y <250的下一个250

Sample data:
index x y
1     10 100
2     270 60
3     550 1000
4     658 1900
5     364 810 
6     74  1890
...
6000  64  71

您能告诉我一种方法吗?我现在将数据作为数据框使用,但是我不知道这是否可行。一些同事告诉我,避免在数据帧中使用循环。我还附上一张散点图的图片,这可能有助于为您可视化我的数据。预先谢谢你!

Example of the data I have

1 个答案:

答案 0 :(得分:0)

使用pd.cut()将变量分类为x-和y-类别,然后根据一些逻辑构造它们的组(取决于您是否想要特定的顺序,下面的代码只需从下至上,从左至右对单元格排序)

bins = [250 * i for i in range(9)]
labels = list(range(8))
df['x_bin'] = pd.cut(df['x'], bins, labels=labels)
df['y_bin'] = pd.cut(df['y'], bins, labels=labels)
df['group'] = df['x_bin'].astype(np.int8) + df['y_bin'].astype(np.int8).multiply(8)

请注意,.astype(np.int8)调用是一种允许使用pandas.Series进行基本数学运算的解决方法。如果您不想存储中间装箱分配,则可以通过用我的最后一行中的列引用替换前几行中的分配,在一行中完成所有这些操作:

df['group'] = pd.cut(df['x'], bins, labels=labels).astype(np.int8) + pd.cut(df['y'], bins, labels=labels).astype(np.int8).multiply(8)
相关问题