如何创建pandas新列,实现按hourOfDay分组组内同值、整体递增ID
实现方案
你可以直接使用pandas内置的分组编号能力实现,不需要拆分合并DataFrame,有两种常用的简洁写法,都兼容category列后续扩展更多取值的场景:
方法1:使用groupby.ngroup()(逻辑最直观)
groupby.ngroup()会按分组的排序顺序为每个分组分配唯一整数编号,默认从0开始,加1即可得到你需要的从1开始的单调递增ID,同一hourOfDay分组内所有行的编号完全一致:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'hourOfDay': [5,5,8,8,13,13], 'category': ['pageA','pageB','pageA','pageB','pageA','pageB'], }) # 新增单调递增ID列 df['index'] = df.groupby('hourOfDay', sort=True).ngroup() + 1
执行后输出结果和你预期的完全一致。
方法2:使用pd.factorize()(性能更高,适合大数据量)
如果你的数据量较大,用factorize直接对hourOfDay列做因子化处理的性能会比分组操作更好:
df['index'] = pd.factorize(df['hourOfDay'], sort=True)[0] + 1
两种方法都默认按hourOfDay的升序分配ID,如果需要调整ID生成顺序,修改sort参数即可。
内容的提问来源于stack exchange,提问作者Bitswazsky
相关产品推荐
相关产品推荐

