如何将DataFrame中含'Narrative'的多行转置为单列
Pandas实现含'Narrative'内容转置合并为单列方案
适用场景说明
可处理两类需求:行内容包含'Narrative'关键词合并、列名包含'Narrative'关键词合并
场景1:行内容包含'Narrative',合并所有匹配行到单独列
实现代码
import pandas as pd # 替换为你的实际DataFrame变量名 df = 你的原始DataFrame # ========== 筛选行内容含'Narrative'的行 ========== # 仅检索指定列(示例中内容列名为content,替换为你的实际列名) match_rows = df[df['content'].str.contains('Narrative', na=False)] # 若要检索整行所有字段包含'Narrative',替换为下面的代码 # match_rows = df[df.apply(lambda x: x.str.contains('Narrative', na=False).any(), axis=1)] # ========== 合并到单列 ========== # 方案A:所有匹配内容合并到同一个单元格,新增列全局统一值 df['merged_narrative'] = '\n'.join(match_rows['content'].astype(str).tolist()) # 方案B:按分组(比如按业务ID分组)合并对应匹配内容,每个分组单独聚合 df_grouped = df.groupby('业务ID列名').agg( # 其他需要保留的字段可按示例新增,取第一个出现的值 字段1 = ('原字段1名', 'first'), 字段2 = ('原字段2名', 'first'), # 合并当前分组下所有含'Narrative'的内容 merged_narrative = ('content', lambda x: '\n'.join(x[x.str.contains('Narrative', na=False)].astype(str))) ).reset_index()
场景2:列名包含'Narrative',合并所有匹配列到单独列
如果是多个列名带'Narrative',需要把这些列的内容转置合并为1列:
# 筛选列名含'Narrative'的所有列 narrative_cols = [col for col in df.columns if 'Narrative' in col] # 合并这些列的内容到新列,空值自动跳过 df['merged_narrative'] = df[narrative_cols].apply( lambda x: '\n'.join(x.dropna().astype(str)), axis=1 ) # 如果需要把这些列转置为多行(每个Narrative单独一行,保留其他字段) df_melt = df.melt( id_vars=[col for col in df.columns if col not in narrative_cols], # 保留的非Narrative列 value_vars=narrative_cols, var_name='narrative_type', value_name='merged_narrative' ).dropna(subset=['merged_narrative'])
内容的提问来源于stack exchange,提问作者robin
相关产品推荐
相关产品推荐

