【问题标题】:Grouping variables based on conditions根据条件对变量进行分组
【发布时间】:2019-11-14 15:05:32
【问题描述】:

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

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

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

【问题讨论】:

  • 您能否重新构建您的问题添加示例数据并具体说明您的需求,一切都不清楚
  • 要对 pandas 使用条件,您可以尝试 df2 = df1[df1.iloc[:,0] > something]
  • 对不起,我没有注意到,现在应该会好点

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


【解决方案1】:

使用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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多