一种在特定范围内对列值进行分组并将值分配给新列的快速方法

Jae*_*ael 1 python dataframe pandas

我有一个巨大的数据框。我想根据某个标准对一列中的值进行分组,并向另一列添加一个新值:对于number从 1000 到 1999列中的所有值,为该group列分配 1 。从 2000 年到 2999 年分配 2,以此类推。

为了更好地理解一个例子:我有数据框 df_test

     number
0    1200
1    1300
2    1450
3    1555
4    2300
5    2341
6    2355
7    2800
8    3003
9    4010
Run Code Online (Sandbox Code Playgroud)

我想按照上面的解释对值进行分组,从而得到以下新数据框。

  number  group
0    1200      1
1    1300      1
2    1450      1
3    1555      1
4    2300      2
5    2341      2
6    2355      2
7    2800      2
8    3003      3
9    4010      4
Run Code Online (Sandbox Code Playgroud)

我用以下循环尝试过:

for  i in range(len(df_test)):
    if df_test.number[i] >= 1000 and  df_test.number[i] < 2000:
        df_test.at[i,"group"] = 1
    elif df_test.number[i] >= 2000 and  df_test.number[i] < 3000:
        df_test.at[i,"group"] = 2
    elif df_test.number[i] >= 3000 and  df_test.number[i] < 4000:
        df_test.at[i,"group"] = 3
    elif df_test.number[i] >= 4000 and  df_test.number[i] < 5000:
        df_test.at[i,"group"] = 4   
Run Code Online (Sandbox Code Playgroud)

我确实工作,但由于我的数据框很大,所以速度很慢。有谁知道实现相同目标的更快方法?:-)

And*_* L. 5

尝试使用//(它是地板div)

df['groups'] = df.number // 1000

Out[1326]:
   number  groups
0    1200       1
1    1300       1
2    1450       1
3    1555       1
4    2300       2
5    2341       2
6    2355       2
7    2800       2
8    3003       3
9    4010       4
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个通用的解决方案,但它是智能的:) (4认同)