pandas如何为DataFrame新建列并迁移首列指定数据到新列
pandas 奇偶行拆分迁移数据实现方法
原始数据为「歌曲名-歌词」两行交替存储的单列表格,按索引奇偶位拆分后重组即可实现需求,操作如下:
- 若原始DataFrame索引不是从0开始的连续整数,先执行重置索引避免取数错位:
# 替换df为实际使用的原始DataFrame变量名 df = df.reset_index(drop=True)
方法1:索引筛选(兼容性强)
通过索引对2取模的结果,分别提取偶数位的歌曲名、奇数位的歌词,重置索引后拼接为新表,即使存在少量数据行数异常也不会直接报错,方便后续排查错位问题:
# 提取偶数索引位的歌曲名称 title_series = df.loc[df.index % 2 == 0, "Lyrics"].reset_index(drop=True) # 提取奇数索引位的歌词内容 lyric_series = df.loc[df.index % 2 == 1, "Lyrics"].reset_index(drop=True) # 组装为目标结构的新DataFrame result = pd.DataFrame({ "Lyrics": lyric_series, "Title": title_series })
方法2:数组重排(写法精简)
如果确认数据完全是「名称+歌词」成对出现、总行数为偶数,可以直接转numpy数组重排,代码更短、运行速度更快:
# 将单列数据按每2行一组折叠 folded_data = df["Lyrics"].to_numpy().reshape(-1, 2) # 生成新表,折叠后第一列为偶数位的名称、第二列为奇数位的歌词,调整列顺序匹配目标结构 result = pd.DataFrame(folded_data, columns=["Title", "Lyrics"])[["Lyrics", "Title"]]
两种方法输出结果一致:新表Lyrics列仅保留歌词内容,新增Title列存储对应歌曲名,行数为原表的1/2,完全匹配预期结构。
内容的提问来源于stack exchange,提问作者Joseph Bertz
相关产品推荐
相关产品推荐

