当前位置: 首页 > news >正文

合并与变形

目录

合并

准备数据

append关键字

concat关键字

merge关键字

join关键字

变形

df.T行列转置

 透视表


合并

很多情况下需要将多个df合并为一个新的df

  • df1.append(df2) 纵向合并数据集

  • pd.concat([df1, df2, ...]) 横向或纵向合并数据集,df1和df2可以没有任何关系, 根据行索引和列名相同合并

  • df1.merge(df2) 横向合并, df1和df2要有关联的列, 类似SQL中的表关联操作

  • df1.join(df2) 横向合并,df1和df2要有相同的索引值才能关联

 准备数据

1 ) df1

import pandas as pddf1 = pd.DataFrame([[1, 2, 3], [1, 10, 20], [5, 6, 7], [3, 9, 0], [8, 0, 3]], columns=['x1', 'x2', 'x3'])
df1

2) df2

df2 = pd.DataFrame([[1, 2], [1, 10], [1, 3], [4, 6], [3, 9]], columns=['x1', 'x4'])
df2

append关键字

df.append()函数纵向连接其他df重置索引返回新的df

1) 索引不改变

df1.append(df2)

2) 改变索引

df1.append(df2, ignore_index=True)
# append 类似与 union all

concat关键字

  • pd.concat()函数纵向连接多个数据集,N个df从上到下一个摞一个:

    • 不使用join='inner'参数,数据会堆叠在一起,列名相同的数据会合并到一列,合并后不存在的数据会用NaN填充

    • 使用join='inner'参数,只保留数据中的共有部分

  • pd.concat(axis=1)函数横向连接多个数据集,N个df从左到右一个挨着一个:

    • 匹配各自行索引,缺失值用NaN表示

    • 使用join='inner'参数,只保留索引匹配的结果

1) 纵向连接,全部数据都保留

# 纵向连接,全部数据都保留
pd.concat([df1, df2])

2)  纵向连接,只保留共有数据

# 纵向连接,只保留共有数据
pd.concat([df1, df2], join='inner')

3)  横向连接,全部数据都保留

# 横向连接,全部数据都保留
pd.concat([df1, df2], axis=1)

4)  横向连接,保留索引值匹配的数据

# 横向连接,保留索引值匹配的数据
pd.concat([df1, df2], join='inner', axis=1)

merge关键字

merge函数能够将df1合并指定列的df2返回新的df

# 写法1 df1.merge(df2, on='列名', how='固定值')

# 写法2 pd.merge(df1, df2, on='列名', how='固定值')

  • merge函数有2种常用参数,参数说明如下

    • 参数on='列名',表示基于哪一列的列值进行合并操作

    • 参数how='固定值',表示合并后如何处理行索引,固定参数具体如下:

      • how='left' 对应SQL中的left join,保留左侧表df1中的所有数据

      • how='right' 对应SQL中的right join,保留右侧表df2中的所有数据

      • how='inner' 对应SQL中的inner,只保留左右两侧df1和df2都有的数据

      • how='outer' 对应SQL中的join,保留左右两侧侧表df1和df2中的所有数据

1) left左连接

pd.merge(df1, df2, how='left', on='x1')

2) right右连接

pd.merge(df1, df2, how='right', on='x1')

3) inner内连接

pd.merge(df1, df2, how='inner', on='x1')

4)outer外连接

pd.merge(df1, df2, how='outer', on='x1')

join关键字

join横向合并索引值相同的多个数据集;通过 lsuffixrsuffix两个参数分别指定左表和右表相同的列名后缀,how参数的用法与merge函数的how参数用法一致
df1.join(df2, lsuffix='_df1的列名后缀', rsuffix='_df2的列名后缀', how='outer')

变形

  • df.T

  • 透视表pivot

    • pd.pivot_table

df.T行列转置

import pandas as pddata = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df1 = pd.DataFrame(data)print("原始数据:")
print(df1)transposed_df = df1.T
print("转置后:")
print(transposed_df)

假设有一个销售数据的数据框df,包含不同地区在不同季度的销售数量。

import pandas as pddata = {'地区': ['北京', '上海', '广州'],'Q1': [100, 120, 90],'Q2': [110, 130, 95],'Q3': [105, 125, 100],'Q4': [115, 135, 105]}df = pd.DataFrame(data)
print("原始数据:")
print(df)

transposed_df = df.T
print("转置后的数据:")
print(transposed_df)

 透视表

数据透视表就是基于原数据表、按照一定规则呈现汇总数据,转换各个维度去观察数据;和excel的透视表在数据呈现上功能相同
df.pivot_table(index='列名1', columns='列名2',values='列名3', aggfunc='内置聚合函数名',margins=True # 默认是False, 如果为True,就在最后一行和最后一列,按行按列分别执行aggfunc参数规定的聚合函数
)
  • 使用说明:以列名1作为索引,根据列名2进行分组,对列名3使用pandas内置的聚合函数进行计算,返回新的df对象

  • 参数说明:

    • index:返回df的行索引,并依据其做分组;传入原始数据的列名

    • columns:返回df的列索引;传入原始数据的列名,根据该列做分组

    • values: 要做聚合操作的原始数据的列名

    • aggfunc:内置聚合函数名字符串

1)  准备数据

df4 = pd.read_csv("../data/d_uniqlo.csv")
df5 = df4.query('销售渠道 == "线下"')
print(df5.head())

2)  构建透视表 

df5.pivot_table(index = '城市',columns = '产品名称',values = '销售金额',aggfunc = 'sum'
)


http://www.mrgr.cn/news/51956.html

相关文章:

  • 高德开放平台——实时路径规划优化指南
  • Google Ads API v18 发布,开发者迎来全新功能与优化
  • Python机器学习
  • 84. 拉伸ExtrudeGeometry
  • 【论文阅读】Detach and unite: A simple meta-transfer for few-shot learning
  • 产品更新|DuoPlus云手机APP预装、批量管理功能新上线!
  • [python]python中sort的key参数使用
  • Sap_FI_凭证类型
  • JavaWeb合集-SpringBoot项目配套知识
  • MATLAB中intersect函数用法
  • Js 更加优雅地实现Form表单重置
  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析四
  • 书籍推荐:《从零构建大型语言模型》附免费PDF下载
  • 【2023医学图像分割文献】UniverSeg: 通用医学图像分割方法
  • MongoDB 8.0已全面可用
  • 制冷压缩机液击介绍
  • 轻松学Python|数据类型:数字类型、空类型、布尔类型
  • 使用Python解决化学问题的实用指南
  • 苹果开源Depth Pro:0.3秒实现从2D图像到3D深度图的革命性突破
  • 又一支付机构“经营异常”——易极付