【问题标题】:Group numbers by increasing increments of 5 in pandas dataframe通过在 pandas 数据框中增加 5 对数字进行分组
【发布时间】:2018-08-18 15:01:29
【问题描述】:

我有一个熊猫数据框,其列值如下:

x1  x2 
0   20
1   20
2   20
3   20
4   20
5   20
6   20
7   20
8   20
9   20
10  20

我想在 group_x1 中将 x1 中的元素分组为 5 的大小,就像这样。 x2 在这种情况下不相关。

x1  x2 group_x1
0   20  0
1   20  0
2   20  0
3   20  0
4   20  0
5   20  1
6   20  1
7   20  1
8   20  1
9   20  1
10  20  1

所以数字中 0 到 4 之间的值被映射到 0 并且从 5 到 9 的值映射到 1。

我尝试了 pq.cut 和 groupby 函数,但它不起作用。对于 0 到 25,000 的值需要它

【问题讨论】:

  • 只是为了确保我理解所需的输出 - 在这种情况下,您想要一个具有来自 group_x1 的索引值的系列,并且系列值是来自 x1 的匹配值列表?例如:0: [0,1,2,3,4]1: [5,6,7,8,9]
  • yes@Elisha ,这将应用于数字范围从 0 到 25000 的列表

标签: python list pandas


【解决方案1】:

试试这个:

df['group_x1'] = df['x1'] // 5

【讨论】:

    【解决方案2】:

    IIUC

    df['group_x1']=np.arange(len(df))//5
    df
    Out[170]: 
        x1  x2  group_x1
    0    0  20         0
    1    1  20         0
    2    2  20         0
    3    3  20         0
    4    4  20         0
    5    5  20         1
    6    6  20         1
    7    7  20         1
    8    8  20         1
    9    9  20         1
    10  10  20         2
    

    【讨论】:

      【解决方案3】:

      这可以在相关列上使用groupbyapply 来实现:

      df = pd.DataFrame([[0], [1], [5], [6]], columns=['x1'])
      df['x1_group'] = (df['x1'] / 5).astype(int)
      groups = df.groupby('x1_group')['x1'].apply(list)
      

      产量:

      x1_group
      0    [0, 1]
      1    [5, 6]
      

      在这种情况下,组键是group_x1,对于每个组,只有x1 值通过apply 方法使用list 进行处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        • 1970-01-01
        • 2021-06-03
        • 1970-01-01
        • 2022-01-01
        • 2022-12-09
        • 1970-01-01
        相关资源
        最近更新 更多