Pandas DataFrame如何沿行重复指定数字序列生成新列Y
pandas 沿行循环生成1-5重复序列列的实现方法
不需要写逐行循环逻辑,用numpy向量化运算实现性能更高,两种常用写法如下:
- 方法1:索引取模法(最简洁)
直接用行序号对5取模后加1,就能得到循环的1-5序列,不受原索引非连续、不从0开始的影响:import pandas as pd import numpy as np # 初始化带X列的DataFrame,此处用示例给出的X值 df = pd.DataFrame({ 'X': [20,95,86,95,9,19,4,26,66,72,26,5,2,73,73,88,51] }) # 生成循环1-5的Y列 df['Y'] = (np.arange(len(df)) % 5) + 1 - 方法2:序列平铺法
用np.tile把目标序列整体平铺到足够长度,再切片对齐DataFrame行数,适合循环不是连续数字的自定义序列场景:# 定义需要循环的集合 cycle_set = [1,2,3,4,5] # 计算需要平铺的轮次,向上取整保证长度足够 repeat_times = int(np.ceil(len(df) / len(cycle_set))) df['Y'] = np.tile(cycle_set, repeat_times)[:len(df)]
两种方法运行后得到的结果完全匹配预期示例:
| X | Y |
|---|---|
| 20 | 1 |
| 95 | 2 |
| 86 | 3 |
| 95 | 4 |
| 9 | 5 |
| 19 | 1 |
| 4 | 2 |
| 26 | 3 |
| 66 | 4 |
| 72 | 5 |
| 26 | 1 |
| 5 | 2 |
| 2 | 3 |
| 73 | 4 |
| 73 | 5 |
| 88 | 1 |
| 51 | 2 |
内容的提问来源于stack exchange,提问作者vp_050
相关产品推荐
相关产品推荐

