如何将某些行转置为列?

时间:2019-08-14 10:54:35

标签: google-sheets transpose google-sheets-formula array-formulas google-sheets-query

转置有很多问题,但是我有一些具体细节,无法创建正确的公式。 因此,我有以下格式的100,000行

0

https://docs.google.com/spreadsheets/d/146-6YHv69DDOnPKheKeRFZIQeZYIgO6UwCMd7X9VeKU/edit?usp=sharing 我需要ARRAYFORMULA或类似的东西才能使这10万行的格式可以在“预期结果”标签上看到。

0

2 个答案:

答案 0 :(得分:2)

q = Select COL1,  SalesPerson   , ContactIDfrom table;


df = pd.read_sql(q, sqlconn)

df1=df.iloc[:, 1:2]


df2 = df1.to_json(orient='records')

0

答案 1 :(得分:0)

您有大量记录,但是每个记录有19个数据字段,分布在10列和12行中。您建议了一个arrayformula(比我可能做的还要聪明得多的人),但是我建议一个脚本,该脚本将当前形式的数据放在一张纸上(例如“源”),然后将数据输出到新的表格(例如“目标”)。

“映射”数据时要解决几个问题:

  • 输入表上代表多少条记录-启用循环所需。我使用了JavaScript Math.floor方法来计算产品数量。
  • 为每个字段标识正确的行/列组合。数据分为三个部分
    • 第一行连续列中的8个字段
    • 第九列的2行中的
    • 2个字段,以及
    • 第十列中九个连续行中的
    • 9个字段。
    • 总计= 12行/ 10列。为此,为了浏览行,我将计数器(i)乘以行数,再加上1;列更直观。
  • 为了提高效率,
    • 仅在脚本开头获取一次数据;
    • 使用数组逐步构建输出;和
    • 在脚本末尾一次更新输出(setValues)。

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourcesheetname = "source";
  var targetsheetname = "target";
  var source = ss.getSheetByName(sourcesheetname);
  var target = ss.getSheetByName(targetsheetname);

  var sourcerange = source.getDataRange();
  var sourcedata = sourcerange.getValues();

  var sourceheaders = 1;
  var rowsperproduct = 12;

  var sourcelr = source.getLastRow();

  var integerPart = Math.floor((sourcelr-sourceheaders)/rowsperproduct);
  //Logger.log("DEBUG: number of products = "+integerPart);

  var rowdata = [];

  // look thought the number of products
  for (var i = 0; i<integerPart; i++){

    // use a temporary array to build the data for the row.
    var temp = [];
    // row 1, copy first eight columns (0-7)
    temp.push(sourcedata[(i*12)+1][0]);//ID
    temp.push(sourcedata[(i*12)+1][1]);//GID
    temp.push(sourcedata[(i*12)+1][2]);//NAME
    temp.push(sourcedata[(i*12)+1][3]);//PRICE
    temp.push(sourcedata[(i*12)+1][4]);//BRAND
    temp.push(sourcedata[(i*12)+1][5]);//URL
    temp.push(sourcedata[(i*12)+1][6]);//country
    temp.push(sourcedata[(i*12)+1][7]);//instock

    // row 2 & 3 in Column I(8)
    temp.push(sourcedata[(i*12)+2][8]);//url1
    temp.push(sourcedata[(i*12)+3][8]);//url2

    // rows 4 - 12 in Column J(9)
    temp.push(sourcedata[(i*12)+4][9]);// tech name
    temp.push(sourcedata[(i*12)+5][9]);// size
    temp.push(sourcedata[(i*12)+6][9]);// inches
    temp.push(sourcedata[(i*12)+7][9]);// mm
    temp.push(sourcedata[(i*12)+8][9]);// depth
    temp.push(sourcedata[(i*12)+9][9]);// BB
    temp.push(sourcedata[(i*12)+10][9]);// ref1
    temp.push(sourcedata[(i*12)+11][9]);// ref2
    temp.push(sourcedata[(i*12)+12][9]);// ref3

    // Update the rowdata for this row
    rowdata.push(temp);

  }

  // update data to target
  target.getRange(2,1,integerPart,19).setValues(rowdata);
}