Python 3.7中如何将pandas DataFrame行内容转为指定列的值?
实现方案
完全可以通过传入指定值列表的方式实现需求,核心逻辑为标记匹配指定类型的行,通过shift方法获取下一行内容完成赋值,具体实现步骤如下:
1. 定义目标匹配列表
先把你给出的item_type取值存入列表,可选对内容做标准化处理避免换行、空格差异导致匹配失败:
import pandas as pd # 你的指定item_type取值列表 target_type_list = [ "Call to \nOrder \n", "Closed \nSession \n", "Call to \nOrder", "Report of \nClosed \nSession \n", "Approval \n of \nMinutes" ] # 可选标准化方案:统一去除首尾空白、把多个连续空白替换为单个空格,避免格式差异导致匹配失效 # df['standard_content'] = df['meet_mins_content'].str.strip().str.replace('\s+', ' ', regex=True) # 同时对target_type_list做同样标准化处理即可
2. 匹配行标记与字段赋值
# 生成匹配掩码:判断当前行meet_mins_content是否在目标列表中 match_mask = df['meet_mins_content'].isin(target_type_list) # 给匹配行的item_type赋值 df.loc[match_mask, 'item_type'] = df.loc[match_mask, 'meet_mins_content'] # 给匹配行的item_content赋值为下一行的meet_mins_content,shift(-1)表示把列内容上移一位,即取当前行的下一行值 df.loc[match_mask, 'item_content'] = df['meet_mins_content'].shift(-1).loc[match_mask]
3. 提取有效结果(可选)
如果需要直接得到仅保留类型+内容的结构化结果,过滤空值即可:
# 过滤掉item_type为空的无效行,删除不需要的列 final_df = df[df['item_type'].notna()].drop(columns=['meet_mins_content']).reset_index(drop=True)
注意事项
- 若DataFrame最后一行为匹配的类型行,
shift(-1)取不到下一行值,item_content会为NaN,可根据业务需求提前做边界处理 - 若存在连续多行均匹配类型列表的情况,前一行的
item_content会取到下一行的类型值,不符合预期的话可增加相邻行校验逻辑处理
内容的提问来源于stack exchange,提问作者Igor G
相关产品推荐
相关产品推荐

