You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过pandas的.loc条件操作合并行并拼接字符串?

解决DataFrame跨行溢出数据的合并问题

针对你遇到的跨行数据合并需求,可以通过分组拼接的方式实现,核心思路是用非空的number列作为分组标识,将同属一个物质的行归为一组后拼接字符串,自动跳过NaN值。

具体实现步骤

  1. 生成分组键
    利用number列的非空值生成连续的分组ID,这样每个有效物质对应的所有溢出行都会被分到同一组:

    import pandas as pd
    import numpy as np
    
    # 你的示例数据
    df = pd.DataFrame([
        ['90', '2-(Acetyloxy)-1-phenyletha-', 'i H2O; vs EtOH,'], 
        [np.nan, 'ne', 'eth, chl; sl bz,'], 
        [np.nan, np.nan, 'lig']], 
        columns=['number', 'name', 'solubility'])
    
    # 生成分组ID:number非空时累加,否则继承上一组ID
    df['group_id'] = df['number'].notnull().cumsum()
    
  2. 分组拼接字符串
    对每个分组的name和solubility列分别拼接,使用dropna()自动跳过NaN值:

    merged_df = df.groupby('group_id').agg({
        'number': 'first',  # 取分组内第一个非空的number
        'name': lambda x: ''.join(x.dropna()),
        'solubility': lambda x: ''.join(x.dropna())
    }).reset_index(drop=True)
    
  3. 查看合并结果
    运行后得到完整的合并数据:

    number                          name                          solubility
    0     90  2-(Acetyloxy)-1-phenylethanone  i H2O; vs EtOH,eth, chl; sl bz,lig
    

关键说明

  • 分组键group_id通过cumsum()实现,确保每个有效物质对应的所有溢出行都在同一组;
  • agg()方法中,number取first()是因为每个分组只有第一行有有效number,其余都是NaN;
  • lambda x: ''.join(x.dropna())会自动过滤掉NaN值,只拼接非空的字符串片段。

内容的提问来源于stack exchange,提问作者Drew Sanislo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:30:53