精华内容
下载资源
问答
  • 在进行数据分析的时候,往往需要把数据表格中的多值列拆分成二值列。如图1中的表A所示,fruits为一个多值列,值可以是不同的水果名字,表明某个以ID作为标识的人吃水果的记录。现在的需求是要把是否吃了什么具体水果...

    在进行数据分析的时候,往往需要把数据表格中的多值列拆分成二值列。如图1中的表A所示,fruits为一个多值列,值可以是不同的水果名字,表明某个以ID作为标识的人吃水果的记录。现在的需求是要把是否吃了什么具体水果拆成多个列,最终如表B所示。在这个例子中,吃水果的记录还有重复,所以需要把重复的记录去掉。

    具体来说,可以将这个任务拆分成多个步骤,由不同的SQL select语句完成。如图2所示。这儿使用的数据库是DB2。


    图1


    图2

    1. 拆分列

    从表A到A1的过程重点是需要将每一行中的水果名字转化成相应新列的0/1值。

    select id, INSTR(fruits, 'apple') as apple, INSTR(fruits, 'banana') as banana
      from A;


    2. 去重

    可以看到,id为3的记录重复出现了。因此需要用group by去掉重复的。这次的查询是基于上一次的结果,因此我们用with将上一次的查询包含进来。

    with q1 as (
      select id, INSTR(fruits, 'apple') as apple, INSTR(fruits, 'banana') as banana
      from A
    )
    select *
      from q1
      group by id, apple, banana;


    3. 整合行

    A2中,id为2的记录出现了2次,可以把相应的列的值整合起来。同样用with将第二次的查询包含进来。

    with q1 as (
      select id, INSTR(fruits, 'apple') as apple, INSTR(fruits, 'banana') as banana
      from A
    ), q2 as (
      select *
      from q1
      group by id, apple, banana
    )
    select id, sum(apple) as apple, sum(banana) as banana
      from q2
      group by id;



    展开全文
  • pandas DataFrame 根据多列做判断,生成新的列值

    万次阅读 多人点赞 2018-03-06 21:49:51
    环境:Python3.6.4 + pandas 0.22主要是DataFrame.apply函数的应用,如果...如代码所示,判断如果城市名中含有ing字段且年份为2016,则新test赋为1,否则为0.import numpy as np import pandas as pd data = ...

    环境:Python3.6.4 + pandas 0.22

    主要是DataFrame.apply函数的应用,如果设置axis参数为1则每次函数每次会取出DataFrame的一行来做处理,如果axis为1则每次取一列。

    如代码所示,判断如果城市名中含有ing字段且年份为2016,则新列test值赋为1,否则为0.

    import numpy as np
    import pandas as pd
    
    data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],
           'year': [2016,2016,2015,2017,2016, 2016],
           'population': [2100, 2300, 1000, 700, 500, 500]}
    frame = pd.DataFrame(data, columns = ['year', 'city', 'population', 'debt'])
    
    def function(a, b):
    	if 'ing' in a and b == 2016:
    		return 1
    	else:
    		return 0
    print(frame, '\n')
    frame['test'] = frame.apply(lambda x: function(x.city, x.year), axis = 1)
    print(frame)

    运行结果如下:


    另外Series类型也有apply函数,用法示例如下:

    import numpy as np
    import pandas as pd
    
    data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],
           'year': [2016,2016,2015,2017,2016, 2016],
           'population': [2100, 2300, 1000, 700, 500, 500]}
    frame = pd.DataFrame(data, columns = ['year', 'city', 'population', 'debt'])
    
    print(frame, '\n')
    frame['panduan'] = frame.city.apply(lambda x: 1 if 'ing' in x else 0)
    print(frame)

    运行结果如下:


    展开全文
  • 1. 逐行处理,当指定多列满足一定条件时,取这几列的最大作为该行的新列值. 2. 将日期划分为上、中、下旬并作为新 代码 1.按col_night,col_day,col_whole三生成标志字段rs_flag,并取它们的最大...

    需求

    从excel读取数据用DataFrame存储,

    1. 逐行处理,当指定多列的值满足一定条件时,取这几列的某个值作为该行的新列值.

    2. 将日期划分为上、中、下旬并作为新列

    知识点

    1. np.where是好理解好用的函数,可以当if else的用,当某列满足一个条件时取某列的值,否则取其他列的值。像excel里的if函数,可以嵌套使用。参考python条件赋值numpy.where() 用法详解

    2.直接用df[条件语句][列名]也可以选出符合条件的列值,如:

    df['新列名']=df[(df['列A']<=3)|(df['列B'].isin(['Chicago','Boston']))]['列C']

    将符合(df['列A']<=3)|(df['列B']=='Chicago')的列C值赋给新列。

    也可以直接用几个条件语句的真假结果赋值给一个新列,如:

    df['新列名']=(df['列A']<=3)|(df['列B'].isin(['Chicago','Boston']))

    也可以用loc函数。

    3.df.max也是个好用的函数,可以取同一行几列值中最大的,也可以取同一列中最大的。

    代码

    1.按col_night,col_day,col_whole三列的值生成标志字段rs_flag;当col_whole>=50时取它自己,否则取其他两个的最大值为新值字段rs_value

    用loc函数;每个条件语句要用();用df.max函数;对于赋值不来自原有字段的,先赋值为数字,便于后续计算,再按条件修改

    #增加字段rs_flag, rs_value
    
    #只要col_night,col_day,col_whole有一个达到条件就记为1,下面的条件语句必须加()
    
    data['rs_flag' ] = 0
    
    data.loc[ (data[col_night]>=30) | (data[col_day]>=30) | (data[col_whole]>=50) , 'rs_flag' ] = 1
    
    #rs_value取同一行这几列的最大值
    
    #这个又犯了将不同条件放在一起比较的错误,大于30的和大于50的条件不同,可能取出的最大值并不一定大于50  data.loc[ (data[col_night]>=30) | (data[col_day]>=30) | (data[col_whole]>=50) , 'rs_value']=data[[col_night,col_day,col_whole]].max(axis=1)
                data['rs_value']=np.where(data[col_whole]>=50, data[col_whole], np.where((data[col_night]>=30) | (data[col_day]>=30),data[[col_night,col_day]].max(axis=1),0))

    2.根据日dd字段生成旬字段dd_xun,类似于SQL的case when;if else嵌套使用; 用df.apply函数,用lambda函数,注意语法

    #增加dd_xun字段
    
    data['dd_xun'] = data['dd'].apply(lambda x: '上旬' if x<=10 else '中旬' if x<=20 else '下旬')

     

    展开全文
  • Oracle 行转pivot 中存放

    千次阅读 2017-08-10 09:42:13
    Oracle 行转pivot 中存放

    Oracle行转列,列中存放多个值

    表结构和数据如下


    insert into prd_slm.t_Slm_Supplier_Codereq (SUPPLIER_CODEREQ_ID, PID, SUPPLIER_PID, APPROVE_STATUS)
    values (6, 'g3                              ', 'a                               ', '6');


    insert into prd_slm.t_Slm_Supplier_Codereq (SUPPLIER_CODEREQ_ID, PID, SUPPLIER_PID, APPROVE_STATUS)
    values (1, 'g1                              ', 'a                               ', '1');


    insert into prd_slm.t_Slm_Supplier_Codereq (SUPPLIER_CODEREQ_ID, PID, SUPPLIER_PID, APPROVE_STATUS)
    values (2, 'g1                              ', 'b                               ', '2');


    insert into prd_slm.t_Slm_Supplier_Codereq (SUPPLIER_CODEREQ_ID, PID, SUPPLIER_PID, APPROVE_STATUS)
    values (3, 'g1                              ', 'b                               ', '3');


    insert into prd_slm.t_Slm_Supplier_Codereq (SUPPLIER_CODEREQ_ID, PID, SUPPLIER_PID, APPROVE_STATUS)
    values (4, 'g2                              ', 'b                               ', '4');


    insert into prd_slm.t_Slm_Supplier_Codereq (SUPPLIER_CODEREQ_ID, PID, SUPPLIER_PID, APPROVE_STATUS)
    values (5, 'g2                              ', 'c                               ', '5');



    WITH pivot_data AS(
      SELECT pid, SUPPLIER_PID, APPROVE_STATUS
        FROM prd_slm.t_Slm_Supplier_Codereq)
      
      SELECT *
        FROM pivot_data PIVOT( LISTAGG(approve_status, ',') WITHIN GROUP(ORDER BY SUPPLIER_PID)
        --max(approve_status) --<-- pivot_clause
             FOR supplier_pid --<-- pivot_for_clause
             IN ('a','b','c','d') --<-- pivot_in_clause
              );


    展开全文
  • 按照某一排序 d = {'A': [3, 6, 6, 7, 9], 'B': [2, 5, 8, 0, 0]} df = pd.DataFrame(data=d) print('排序前:\n', df) ''' 排序前: A B 0 3 2 1 6 5 2 6 8 3 7 0 4 9 0 ''' res = df.sort_val...
  • 大家平时在查询数据的时候,肯定会遇到需要将一变成一行; 第一种情况:显示在同一行的同一上 1、新建一个表test 可以参考:https://blog.csdn.net/heqiang525/article/details/90210326 里面的建表...
  • MYSQL一个字段拼接成一函数group_concat示例函数相关配置 示例 1.单列多行合并单行单列展示 select group_concat(name) as name from student where classId = 1 执行结果如下图: 2.多列拼接,多列多行...
  • 一.遇到的问题描述: 我遇到问题的数据比较复杂,下面以比较简单的数据为例说明问题,所以这些数据的含义是没有意义的,可以忽略数据的的具体意义。数据如下所示: import numpy as np import pandas as pd ...
  • 【Hive】多列最大 或 数组最大

    万次阅读 2018-11-08 09:39:03
    当我们想要对多列同行之间进行比较时,可以尝试以下办法: 1.先将数值转换成数组array(),再对数组排序sort_array(),通过负值使其为降序; select -sort_array(array(-a,-b,-c))[0] as max_value from ( select...
  • 目标1:从d0数据框中,筛选出rs中包含 '2_161686082’中值的数据框 ** d1 = d0.loc[d0['rs']=='2_161686082'] d1 ** 目标2:从d0数据框中,筛选出rs中包含 ** l1=['2_161686082','ALGA0072703','ASGA0022902'...
  • SQLServer一行多列求最大

    千次阅读 2016-08-16 21:26:41
    SQLServer行多列求最大
  • 例如: CLARK WORKS AS A MANAGER KING WORKS AS A CLERK 在数据库中CLARK,KING在数据表中的...来自不同 DB2,Oracle,PostgreSQL 在这些数据库中使用双竖线作为连接运算符。 select
  • 现要查询得到最大 , 并只需要返回最大 方法一: select case when F12>F34 then F12 else F34 end as MaxNum from (select case when F1>F2 then F1 else F2 end as F12, case when F3>F4 then
  • sql查询一个字段多列值合并为一

    千次阅读 2019-03-27 16:22:00
    SELECT GROUP_CONCAT(A.字段) AS 字段别名 FROM ...字段='字段' AND a.字段 IN (1,2,3) SELECT GROUP_CONCAT(A.字段) AS 字段FROM 表名 A 转载于:https://www.cnblogs.com/yanchaohui/p/10608415.html...
  • Python中将DataFrame类型的数据按某一拆分成个DataFrame类型的数据 1. 循环定义个变量 当定义变量的个数是n时,定义n个变量: 注: eval()函数和exec()函数的区别: eval()函数只能计算单个...
  • vba里的listbox是一个既需要有恶心的控件。 如果你是将二维数组赋值给Listbox.rowsource的话,当需要取得...如果listbox是多列的情况下,将listbox.column属性看作一个二维数组使用,比如获取第一行第一 list
  • oralce写法:select WM_CONCAT(A.title) as citys from tmpcity A sql server写法:select stuff((select ','+A.title from tmpCity A FOR xml PATH('')), 1, 1, '') as citys MySQL写法:select GROUP_CONCAT(A....
  • 学习笔记-DataFrame求多列平均

    万次阅读 2020-02-28 01:46:43
    df = pd.DataFrame({'A': [1, 1, 1, 2, 2, 3, 3],'B':[1, 4, 3, 2, 1, 3, 3],'C':[1, 4, 3, 2, 1, 3, 3]}) df >>> A B C 0 1 1 1 1 1 4 4 2 1 3 3 3 2 2 2 4 2 1 1 5 3 3 3 6 3 3 3 # 求A, B 两列平均 df['D'] = ...
  • MySQL 修改

    千次阅读 2009-08-13 01:38:04
    update tablename set '列名1'='属性','列名2'='属性','列名3'='属性' where '主键名'='属性'; 错误的语法: update tablename set '列名1'='属性','列名2'='属性','列名3'='属性' where '主键名'='...
  • 根据两列数据的自定义函数产生新的一数据def do_merchant(x,y): return y/x A_2Vehicle_count['vehicle_count']=map(lambda x,y:do_merchant(x,y),A_2Vehicle_count['ave_time'],A_2Vehicle_count['sum_time']) ...
  • 今天写sql语句,需要取出个字段中的最大和最小值。  本来想到的做法比较麻烦,要分别取出max(one),max(two),max(three),放到pb中在编程处理。  后来找到个greatest 函数和least函数,只用写greatest (max...
  • ![图片说明](https://img-ask.csdn.net/upload/201608/23/1471918030_337265.png) 如图,能不能统计出如下结果 ![图片说明]... 共有24,比较,求问下有没有什么方便且效率高的方式 (每月300w条数据)
  • 假如要求EMPNO, MGR,SAL三中的最大、最小值,代码如下: SELECT EMPNO, MGR,SAL, greatest (EMPNO, MGR,SAL) max, least(EMPNO, MGR,SAL) min FROM emp 结果如下图: 如果只想显示最大、最小...
  • 最近在处理一个系列数据,但是在处理空缺时出现了问题,由于空缺无法直接删除,所以就想着用另一来替换这些空缺。 具体操作如下: df_08['昵称'].fillna(df_08['IP地址'],inplace=True) 我一直以为...
  • 表结构:operation_name, network_type, ...需求:将shell_time, shell_time2, load_time三个字段转为两个字段:type, time,type为字段名称,time为字段的 样例数据: operation_name network_type type time ...
  • DataGridView当更改了其中一后,动态更改另一。 功能就是更新某数据,相应的更新时间也要更改,使用的是Access数据库。完整版本。.
  • 在sql中如何把一拆分成多列

    千次阅读 2017-12-22 12:51:00
    转载于:https://www.cnblogs.com/jichen/p/8085488.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,968,583
精华内容 787,433
关键字:

多值列