如何在Pandas DataFrame中快速添加可动态分组的reading_set列?
实现方法
当然有高效的办法啦!而且完全支持动态设置每组的读数数量,下面给你两种简单易用的方案:
方法一:利用DataFrame索引直接计算
这是最简洁的方式,假设你想要每组的读数数量为group_size(比如你的需求里是3),直接通过索引的整数除法就能生成分组编号:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'reading': [12,13,23,9,10,67,23], 'other': [23,15,72,23,15,99,68] }) # 动态设置每组数量 group_size = 3 # 添加reading_set列 df['reading_set'] = df.index // group_size + 1
运行后得到的结果完全符合你的预期:
| reading | other | reading_set | |
|---|---|---|---|
| 0 | 12 | 23 | 1 |
| 1 | 13 | 15 | 1 |
| 2 | 23 | 72 | 1 |
| 3 | 9 | 23 | 2 |
| 4 | 10 | 15 | 2 |
| 5 | 67 | 99 | 2 |
| 6 | 23 | 68 | 3 |
方法二:用Numpy生成序列计算
如果你的DataFrame索引不是连续的整数(比如有自定义索引),可以用numpy.arange生成连续序列来计算,兼容性更强:
import numpy as np group_size = 3 df['reading_set'] = np.arange(len(df)) // group_size + 1
原理和方法一完全一致,只是用np.arange(len(df))生成了从0开始的连续整数序列,再做整数除法和加1操作。
特殊情况处理
如果你的DataFrame有非连续的索引,还可以先重置索引再计算:
df['reading_set'] = df.reset_index(drop=True).index // group_size + 1
这样不管原来的索引是什么样的,都能保证分组是按行的顺序来划分的。
这种方式的优势在于完全动态——你只需要修改group_size的值,就能轻松调整每组的读数数量,比如改成group_size=5就会每5条数据分为一组,非常灵活!
内容的提问来源于stack exchange,提问作者J T
相关产品推荐
相关产品推荐

