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

如何在OpenRefine中实现行转列(Transpose Rows)操作?

解决OpenRefine中单列多行用户信息转置为多列的问题

嘿,我之前刚好处理过几乎一模一样的场景,结合你用的OpenRefine 2.6-rc.2版本,给你一步步拆解操作,保证能搞定:

第一步:给每组用户数据添加分组ID

你的数据是按「姓名→公司→地点」循环排列的,每组3行,所以先给同一用户的三行打上相同的分组标记:

  • 点击原列(比如默认叫column1)的下拉菜单,选择「Edit column」→「Add column based on this column」
  • 列名填group_id,输入公式:floor((row.index)/3)

    解释:row.index是行的索引(从0开始),除以3取整后,每3行就会得到同一个ID,比如第0-2行是0,3-5行是1,刚好对应每个用户的一组数据

第二步:拆分每行的字段名和值

你的行内容是「字段名+内容」的格式(比如Company Name IBM),得把它们拆分开,方便后续转置:

  1. 新增field_name列:
    • 同样用「Add column based on this column」,列名field_name,公式:
      if(startsWith(value, "Company Name") || startsWith(value, "Location"), 
         split(value, " ", 2)[0] + " " + split(value, " ", 2)[1], 
         "Name")
      

    解释:判断如果是公司或地点行,就拆分出前两个词作为字段名;如果是姓名行(没有前缀),就直接设字段名为Name

  2. 新增field_value列:
    • 列名field_value,公式:
      if(startsWith(value, "Company Name") || startsWith(value, "Location"), 
         split(value, " ", 2)[2], 
         value)
      

    解释:公司/地点行取拆分后的第三部分及以后的内容(避免像Lockheed-Martin这种带连字符的内容被拆碎),姓名行直接用原内容

第三步:执行转置(Pivot)操作

现在就可以把多行转成多列了:

  • 点击顶部菜单栏的「Rows」→「Pivot rows...」
  • 在弹出的配置窗口里:
    • Rows to pivot by:选择刚才的field_name列(用它作为新表的列名)
    • Values in column:选择field_value列(用它作为新表的单元格内容)
    • Pivot on:选择group_id列(确保同一分组的行转成同一行的不同列)
  • 确认设置后点击「Pivot」,你就能得到每行对应一个用户,列是Name、Company Name、Location的规整表格了

额外提示

如果你的数据里存在分组行数不固定的情况(比如有的用户缺字段),那生成group_id的公式要调整:可以用姓名行作为分组的起始标记,公式改成cumsum(not(startsWith(value, "Company Name")) && not(startsWith(value, "Location"))),这样每次遇到姓名行,分组ID就自动加1,适配不固定行数的分组。

内容的提问来源于stack exchange,提问作者Paul Ross

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:11:31