DataTable扩展 列转行方法(2*2矩阵转换)

这篇具有很好参考价值的文章主要介绍了DataTable扩展 列转行方法(2*2矩阵转换)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 DataTable扩展 列转行方法(2*2矩阵转换),后端,c#

源数据 如图所示

// <summary>
        /// DataTable扩展 列转行方法(2*2矩阵转换)
        /// </summary>
        /// <param name="dtSource">数据源</param>
        /// <param name="columnFilter">逗号分隔 如SDateTime,PM25,PM10,O3,NO2,SO2,CO 第一个参数为行,其余为要转换的列</param>
        /// <returns></returns>
        public static DataTable PivotDatatableColToRow(this DataTable dtSource, string columnFilter)
        {
            var columns = columnFilter.Split(',');
            DataTable dtFilter = dtSource.DefaultView.ToTable(false, columns);
            DataTable dtResult = new DataTable();

            var rowCount = dtFilter.Rows.Count;
            var columnCount = columns.Length;

            // 源数组的行数比DataTable的行数+1,, 加一行表头
            object[,] arrSource = new object[rowCount + 1, columnCount];

            // 目标数组的行数等于选择的列数,列数等于 源数据的行数+1, 加一列 属性名
            object[,] arrResult = new object[columnCount, rowCount + 1];

            // 原数组第一行写表头
            for (int i = 0; i < columnCount; i++)
            {
                arrSource[0, i] = dtFilter.Columns[i].ColumnName;
            }

            // 源数据 每一行写 数据
            for (int i = 0; i < rowCount; i++)
            {
                for (int j = 0; j < columnCount; j++)
                {
                    arrSource[i + 1, j] = dtFilter.Rows[i][j];
                }
            }

            // 原数 转置到 目标数组
            for (int i = 0; i < rowCount + 1; i++)
            {
                for (int j = 0; j < columnCount; j++)
                {
                    arrResult[j, i] = arrSource[i, j];
                }
            }

            // 创建 Datatable 的结构
            for (int i = 0; i < rowCount + 1; i++)
            {
                if (!dtResult.Columns.Contains(arrResult[0, i].ToString())) {
                    dtResult.Columns.Add(arrResult[0, i].ToString());
                }
            }

            List<string> valueList = new List<string>();
            for (int i = 1; i < columnCount; i++)
            {
                for (int j = 0; j < rowCount + 1; j++)
                {
                    valueList.Add(arrResult[i, j].ToString());
                }

                dtResult.Rows.Add(valueList.ToArray());
                valueList.Clear();
            }
            return dtResult;
        }

 转换后的数据

DataTable newdt = dt.AsEnumerable().Where(p => p.Field<string>("City") == "武汉").CopyToDataTable().PivotDatatableColToRow("SDateTime,PM25,PM10,O3,NO2,SO2,CO");

DataTable扩展 列转行方法(2*2矩阵转换),后端,c#文章来源地址https://www.toymoban.com/news/detail-691760.html

到了这里,关于DataTable扩展 列转行方法(2*2矩阵转换)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C#】实体类和DataTable之间相互转换,实体反射动态遍历列

    在实际项目中,经常会用到数据之间的相互转换,序列化和反序列化就是常见场景。这里我们只简单聊聊实体类和DataTable之间的相互转换,可以用于不同业务场景使用。 要将C# DataTable 转换为 Model 实体类,你可以使用反射来获取 DataTable 的列和值,并通过实例化 Model 类来赋值

    2024年02月15日
    浏览(34)
  • Hive的行列转换(行转多列、多列转行、行转单列、单列转行)

    在实际使用Hive的过程中,常常会涉及到行列转换,细分的话,有下面4种类型的行列转换,分别是: 行转多列 多列转行 行转单列 单列转行 下面我们通过样例介绍每种行列转换的实现方法。 样例表 班级成绩表: 姓名(name) 学科(subject) 成绩(score) 行列转换思路分析及实现 行转

    2024年02月15日
    浏览(80)
  • 一分钟看懂:前端和后端,哪个更简单?转行程序员必看!

    大家好,这里是程序员晚枫,专注于转行程序员的1对1咨询,小红薯也叫这个名。 想转行程序员的朋友,在选择方向的时候都会遇到一个问题: 哪个技术方向适合我?前端和后端哪个更简单? 今天咱们就来一起分析一下~ 很多网上的消息或者培训机构的广告会告诉你:前端比

    2024年02月07日
    浏览(43)
  • 8.5 PowerBI系列之DAX函数专题-dax列转行vs矩阵列转行和逆透视

    使度量值在行上呈现,如下图 1.用power query实现:在power query-转换-逆透视列中将原始数据进行列销售数量,列销售金额进行逆透视。然后在报表页面将逆透视的列放到行上。 2.用dax实现: 1)创建一个辅助表,单一列,包含销售数量,销售金额两个值; 2) 0 3)拓展:矩阵中

    2024年01月16日
    浏览(42)
  • 状态转移矩阵计算方法及其离散化转换(含举例)

    一般地,对于一个线性定常系统,可以写成如下的柯西标准型形式 { x ˙ ( t ) = A ( t ) x ( t ) + B ( t ) u ( t ) y ( t ) = C ( t ) x ( t ) + D ( t ) u ( t ) begin{cases} dot x (t) = A(t) x(t) + B(t) u(t) \\\\ y(t) = C(t) x(t) + D(t) u(t) end{cases} { x ˙ ( t ) = A ( t ) x ( t ) + B ( t ) u ( t ) y ( t ) = C ( t ) x ( t ) + D ( t ) u

    2024年02月08日
    浏览(42)
  • 卷积计算转换为矩阵乘计算的几种场景和方法

    本文默认卷积的输入输出数据格式为NHWC。 为什么要把卷积转换为矩阵乘计算 有几个原因,1. 因为矩阵乘优化已经被研究了几十年,有丰富的研究成果,有性能很好的BLAS加速库可用。2. 矩阵乘优化比卷积更加简单,这主要是因为矩阵乘的参数比较少,主要是M, N, K三个参数,

    2024年02月04日
    浏览(57)
  • 【解惑】介绍.net中的DataTable的AcceptChanges方法

    DataTable.AcceptChanges 方法是一个用于 DataTable 对象的方法,它将所有对 DataTable 进行的更改标记为已接受。这意味着所有新增、修改和删除的行都将被标记为 DataRowState.Unchanged ,并且 DataTable 对象的 HasChanges 属性将返回 false 。 需要强调的是, AcceptChanges 方法只是将更改标记为已

    2024年02月15日
    浏览(37)
  • springboot:时间格式化的5种方法(解决后端传给前端的时间格式转换问题)推荐使用第4和第5种!

    本文转载自:springboot:时间格式化的5种方法(解决后端传给前端的时间显示不一致)_为什么前端格式化日期了后端还要格式化_洛泞的博客-CSDN博客 为了方便演示,我写了一个简单 Spring Boot 项目,其中数据库中包含了一张 userinfo 表,它 的组成结构和数据信息如下:  项目目

    2024年02月10日
    浏览(46)
  • C#中将DataTable转化成ListT的方法解析

    在C#中,数据的操作是至关重要的一个方面,常常需要将数据从一个形式转换成另一个形式以满足我们的需求。其中,DataTable和List是常见的两种数据形式。DataTable是一种表格形式的数据类型,它以行和列的形式存储数据。List是一种集合类型,它可以存储任意类型的对象,并且

    2024年02月16日
    浏览(42)
  • python | 复杂网络:将关系对转换为邻接矩阵(常规方法以及pivot函数)

    复杂网络中常常需要将得到的关系对(图一)转换为邻接矩阵,并存储为csv格式。本文将介绍两方法来进行处理:方法一是构建数据框赋予值。方法二是利用pivot () 函数将一维表转换为二维表。本文所采用的例子为 有向加权网络 。 首先我们的原始数据为关系对(图一):

    2023年04月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包