如何多次拼接Pandas DataFrame并使指定数值列从1到12递增?
实现方案
这里提供两种高效的实现方法,均适配你5000行原始数据的场景,不会有性能问题:
方法1:列表推导式+concat(写法最直观)
直接遍历1到12的数值,每次修改原始DataFrame最后一列的值后拼接即可:
import pandas as pd # 请将下方df_raw替换为你自己的原始DataFrame变量名 result = pd.concat( [df_raw.assign(**{df_raw.columns[-1]: num}) for num in range(1, 13)], ignore_index=True )
参数说明:
df_raw.columns[-1]动态读取最后一列的列名,无需你手动填写,避免列名写错ignore_index=True会自动重置最终结果的行索引,避免出现重复的索引值range(1,13)生成1到12的整数,刚好对应你要拼接的12次需求
方法2:numpy重复操作(性能最优)
如果后续数据量进一步增大,推荐用这种完全向量化的操作,比多次拼接效率更高:
import pandas as pd import numpy as np # 重复12次原始DataFrame的所有行 df_repeat = df_raw.loc[np.repeat(df_raw.index, 12)].reset_index(drop=True) # 给最后一列赋值为1到12的循环序列 df_repeat.iloc[:, -1] = np.tile(np.arange(1, 13), len(df_raw))
你可以根据自己的使用习惯选择任意一种方法,最终输出结果和你示例的效果完全一致。
内容的提问来源于stack exchange,提问作者Adam_Gie
相关产品推荐
相关产品推荐

