Pandas 横向数据汇总实例

在某些情况下需要对Excel中的数据做横向汇总,此时使用Pandas的将体现出很强的优势,请看下面的数据:
 

表格中有5个子类别:类别1----类别5,每一行中至少有1个类别的值是1,表示当前行有多个类别类别属性
两个汇总列:汇总类别1,汇总类别2
汇总要求
1. 类别1列中等于1的值,要替换成字符串 A类;
    类别2列中等于1的值,要替换成字符串 B类;
    类别3列中等于1的值,要替换成字符串 C类;
    类别4列中等于1的值,要替换成字符串 D类;
    类别5列中等于1的值,要替换成字符串 E类;
  
2. 最靠近左边的类别字段汇总到类别汇总1,其他的类别都汇总到类别汇总2

例如:
1. 某一行的类别1、类别2字段被选中其他类别是空,汇总之后的结果是类别汇总1=A类,类别汇总2=B类
2. 某一行的类别1、类别2、类别3 字段被选中其他类别是空,汇总之后的结果是类别汇总1=A类,类别汇总2=B类,C类
3. 某一行的类别4字段有数据,其他类别是空,汇总之后的结果是类别汇总1=D类

汇总后的结果:

通过汇总结果来看,类别1到类别5的数据是横向跌落到左边两个个汇总字段中。
用jupyter 来实现这个需求,

第1步: 载入这个exce文件 类别数据汇总.xlsx

import pandas as pd

file = r'E:\wangyq\learn\python\数据分析\pandas_02\类别数据汇总.xlsx'
data= pd.read_excel(file,sheet_name='S1',index_col='名称')
data

第2步:替换数据

def fill_class():    
    a=list('ABCDE')
    for index,k in enumerate(a,start=1):
        fieldName = '类别{0}'.format(index)
        data[fieldName]= data[fieldName].apply(lambda x: '{0}类'.format(k) if x>0 else '' )

fill_class()
data

 for循环中的内容展后其实是这样:

    data['类别1']= data['类别1'].apply(lambda x: 'A类' if x>0 else '' )
    data['类别2']= data['类别2'].apply(lambda x: 'B类' if x>0 else '' )
    data['类别3']= data['类别3'].apply(lambda x: 'C类' if x>0 else '' )
    data['类别4']= data['类别4'].apply(lambda x: 'D类' if x>0 else '' )
    data['类别5']= data['类别5'].apply(lambda x: 'E类' if x>0 else '' )

执行结果是这样:

第3步:开始汇总
这里的汇总分成两步,先计算出类别汇总1字段值

def setClass1(row):
    field = ['类别2','类别3','类别4','类别5']
    value = ''

    # 如果类别1字段不是空,直接返回类别1的字段值
    if len(row['类别1'])>0:
        value = row['类别1']
    else:
        # 否则从类别2开始向后拼接各个列字段值,并且只取最靠近左边的值
        for f in field:
            if len(row[f])>0:
                
                value = row[f]

                # 得到值之后立即退出循环返回结果
                break
        
    return value

data['类别汇总1'] = data.apply(lambda row: setClass1(row),axis=1)

data

这里用到了DataFrame的apply函数,可以作用于DataFrame的每个值,但是接受的参数不是各个值本身,而是DataFrame里各行(或列),返回一个新的行(列),axis=0表示操作列,axis=1表示操作行。
函数定义:
DataFrame.apply(func,axis=0)
该函数的参数是一个普通函数或者一个匿名函数,这里的用法是用lambda 调用setClass1,指定axis=1,表示是X轴方面的计算,同时给正常的函数传递一个row,这里的row其实是整行数据,在setClass1里面可以访问整行数据的不同列。

在jupyter里面可以单独执行上面的这段代码,返回结果如下:

可以看到类别汇总1的数据已经计算完成符合上面的要求

计算类别汇总2的值:
其实算法和上面的比较类似,但是为了清晰,我还是独立定义了一个新的函数

def setClass2(row):
    field = ['类别1','类别2','类别3','类别4','类别5']
    values = []
    for f in field:
        if len(row[f])>0:                
            values.append(row[f])    
    if len(values)>=2:
        return ','.join(values[1:])
    elif len(values)<=1:
        return ''

data['类别汇总2'] = data.apply(lambda row: setClass2(row),axis=1)
data

总体算法是:
从类别1开始拼接各个类别的值,判断如果各列值不是空则添加到list,如果list值>=2,则跳过第一个元素(因为左边第一个元素会被作为类别汇总1的值)后面的数据转换成用逗号分隔的字符串返回。如果整个行的类别合并之后只有1个元素或者小于1个元素,那么返回空字符串。
执行结果如下:
 


最后一步把结果输出到excel文件
 

dest=r'E:\pandas_02\类别汇总.xls'
data.to_excel(dest,index=None)

打开这个文件:
 

可以看到已经汇总完成。其实可以有更优雅的处理方案,欢迎各位亲勇于探索,交流讨论

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: pandas和numpy是Python中常用的数据分析库,可以用于处理和分析各种数据。以下是一些pandas和numpy的数据分析实例: 1. 数据清洗:使用pandas清洗数据,包括去除重复值、处理缺失值、转换数据类型等。 2. 数据可视化:使用pandas和matplotlib库进行数据可视化,包括绘制折线图、柱状图、散点图等。 3. 数据分析:使用pandas和numpy进行数据分析,包括计算统计量、数据聚合、数据透视表等。 4. 机器学习:使用pandas和numpy进行机器学习,包括数据预处理、特征工程、模型训练等。 5. 时间序列分析:使用pandas进行时间序列分析,包括时间序列数据的处理、分析和预测等。 总之,pandas和numpy是Python中非常强大的数据分析工具,可以帮助我们更好地处理和分析各种数据。 ### 回答2: Pandas和Numpy是数据分析领域中最为重要的两个工具,在处理数据时可以大大提高效率和准确度。下面就为大家介绍一些Pandas和Numpy的数据分析实例。 1. 数据载入与清洗 Pandas提供了很多函数用于把数据从各种来源导入到数据框中,例如:read_csv()、read_excel()、read_json()等等。读入后数据框的数据结构就便于清洗和处理了。 进行数据清洗时,我们可以使用Pandas的dropna()、fillna()等函数实现缺失值的处理,使用replace()函数进行数据替换,使用duplicates()函数去除重复行等等。 2. 数据过滤与筛选 在数据分析中,我们经常需要根据某些条件对数据进行过滤和筛选。可以使用Pandas的查询函数query()、元素选分函数isin()、布尔函数bool()等函数进行数据筛选。 3. 数据统计与分析 利用Numpy和Pandas的各种数学函数可以方便地对数据进行统计和分析。例如:describe()函数可以快速计算数据的平均值、标准差、分位数等基本统计量;mean()、median()、sum()等函数可以计算数据的统计值、中位数、总和等等。 4. 数据可视化 将分析结果可视化是数据分析的重要组成部分。Pandas提供了强大的绘图功能,通过调用plot()函数可以轻松地生成各种类型的图表,包括折线图、散点图、热力图等等。 总之,Pandas和Numpy的数据分析工具使处理大量数据变得更加简便、高效。通过这些工具,我们能够更加准确地进行数据分析与决策,实现数据挖掘、处理和应用的目标。 ### 回答3: Pandas 和 NumPy 是我们经常用来处理和分析数据的 Python 库。Pandas 提供了一个高效的数据结构 DataFrame,可以方便地进行数据分析和展示;而 NumPy 则提供了高性能的矩阵计算功能,可以进行科学计算。 以下是一个使用 Pandas 和 NumPy 进行数据分析的例子: 我们有一个 CSV 文件包含销售数据,包括销售日期、商品名称、销售数量和单价等信息。我们希望对这些数据进行分析,找出哪些商品被销售得最多,哪些时间段是销售高峰期等。 首先,我们需要使用 Pandas 读取 CSV 文件,并将其转化为一个 DataFrame 对象,方便我们操作和分析数据。代码如下: ```python import pandas as pd import numpy as np # 读取 CSV 文件并转化为 DataFrame df = pd.read_csv('sales.csv') ``` 接着,我们可以用 Pandas 的 groupby 函数分组,统计每种商品的销售数量和销售总额,并按照销售数量对商品进行排序。代码如下: ```python # 按照商品名称分组统计销售情况 sales_by_product = df.groupby(['product'])[['quantity', 'price']].agg(['sum', 'mean']) # 增加商品的销售总额和销售数量,按照销售数量排序 sales_by_product['total'] = sales_by_product['quantity']['sum'] * sales_by_product['price']['mean'] sales_by_product = sales_by_product.sort_values(('quantity', 'sum'), ascending=False) print(sales_by_product.head()) ``` 输出结果如下: ``` quantity price total sum mean sum mean product 手机 1224 3.297297 2396 645.945946 788191.192093 电视 780 2.812500 1516 546.875000 426600.000000 电脑 546 3.735632 1188 811.224490 443387.755102 空调 382 3.023810 756 5.985714 394228.571429 冰箱 346 2.932203 708 6.000000 277176.271186 ``` 可以看到,销售量最多的商品是手机,销售总额为 788191.19 元。我们还可以继续使用 Pandas数据进行分析和可视化,以便更好地理解数据。 除了 Pandas,NumPy 在数据分析中也发挥着重要作用。我们可以使用 NumPy 矩阵计算的功能,计算总销售额、平均值等统计量。代码如下: ```python # 计算总销售额和平均值 total_sales = np.sum(df['quantity'] * df['price']) average_sales = np.average(df['quantity'] * df['price']) print('总销售额:%.2f 元' % total_sales) print('平均销售额:%.2f 元' % average_sales) ``` 输出结果如下: ``` 总销售额:906245.00 元 平均销售额:301.56 元 ``` 可以看到,我们的销售数据总销售额为 906245 元,平均销售额为 301.56 元。 综上所述,Pandas 和 NumPy 是 Python 数据分析中不可或缺的两个库。我们可以使用它们来对数据进行处理和分析,以便更好地理解数据并提取有用信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值