基于两列新增行:Year行后按Column3值生成Year period行
实现表格按规则新增行的解决方案
需求规则
- 当表格中
Column1的值为Year时,在该行下方插入一行,该行Column1固定为Year period - 插入行的
Column3值由对应Year行的Column3值判断:- 若原行
Column3 < 2010,插入行Column3为Below2010 - 若原行
Column3 ≥ 2021,插入行Column3为Above2020 - 若
2010 ≤ Column3 ≤ 2020,插入行Column3为Range in 2010/2020
- 若原行
- 插入行的其余列数据与对应
Year行完全一致
输入表格
Column1 Column2 ColumnX Column3 0 Year 1 A 2009 1 Date 1 A 12 2 Year 2 A 2021 3 Year 3 A 2011
预期输出表格
Column1 Column2 ColumnX Column3 0 Year 1 A 2009 1 Year period 1 A Below2010 2 Date 1 A 12 3 Year 2 A 2021 4 Year period 2 A Above2020 5 Year 3 A 2011 6 Year period 3 A Range in 2010/2020
Python Pandas实现代码
import pandas as pd # 初始化输入数据(实际使用时可替换为读取文件,如pd.read_csv()) input_data = { 'Column1': ['Year', 'Date', 'Year', 'Year'], 'Column2': [1, 1, 2, 3], 'ColumnX': ['A', 'A', 'A', 'A'], 'Column3': [2009, 12, 2021, 2011] } df = pd.DataFrame(input_data) # 存储需要插入的行 insert_rows = [] for _, row in df.iterrows(): if row['Column1'] == 'Year': new_row = row.copy() new_row['Column1'] = 'Year period' # 匹配Column3的规则 if row['Column3'] < 2010: new_row['Column3'] = 'Below2010' elif row['Column3'] >= 2021: new_row['Column3'] = 'Above2020' else: new_row['Column3'] = 'Range in 2010/2020' insert_rows.append(new_row) # 重组所有行,确保插入行紧跟对应Year行 final_rows = [] insert_idx = 0 for _, row in df.iterrows(): final_rows.append(row) if row['Column1'] == 'Year': final_rows.append(insert_rows[insert_idx]) insert_idx += 1 # 生成最终表格并重置索引 result_df = pd.DataFrame(final_rows).reset_index(drop=True) print(result_df.to_string())
代码说明
- 先构造输入DataFrame,实际场景中可替换为
pd.read_csv()或其他方式读取表格数据 - 遍历原表格,筛选出
Column1为Year的行,复制后按规则修改Column1和Column3,存入插入行列表 - 再次遍历原表格,依次添加原行和对应的插入行,保证插入行的位置正确
- 将所有行转换为新的DataFrame并重置索引,得到符合预期的结果
内容的提问来源于stack exchange,提问作者Eswar
相关产品推荐
相关产品推荐

