pandas将DataFrame的几列数据合并成为一列

要将DataFrame的几列数据合并成为一列,可以使用pandas的melt()函数和concat()函数。

melt()函数可以将多列数据合并成为一列,其语法如下:

melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

其中:

  • frame:要操作的DataFrame对象。
  • id_vars:列名或列名列表,其值会被保留不变。
  • value_vars:列名或列名列表,其值会被转化成一列新的数据列。
  • var_name:新列的列名,默认为‘variable’。
  • value_name:新列的值名称,默认为‘value’。
  • col_level:如果value_vars是多列列名列表,则可以指定这些列属于哪个级别。

concat()函数可以用于合并多个DataFrame对象,其语法如下:

concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

其中:

  • objs:要合并的DataFrame对象,可以是一个列表、元组或字典。
  • axis:合并时的轴向,0为纵向合并,1为横向合并。
  • join:合并时的方式,‘inner’为交集,‘outer’为并集。
  • join_axes:合并时依据的索引。
  • ignore_index:是否忽略合并后的索引。
  • keys:将对象分组的键,可以是升序排序的唯一值列表或元组。
  • levels:分层索引级别,可以指定哪些索引用于合并。
  • names:用于创建分层索引的名称。
  • verify_integrity:是否检查结果对象的重复项。
  • sort:是否根据字典顺序排序结果对象。
  • copy:是否复制数据。

示例一:

假设我们有如下的DataFrame对象,记录了三家超市每种商品的销售额和利润:

import pandas as pd

df = pd.DataFrame({
    'Supermarket': ['A', 'B', 'C'],
    'Product 1 Sales': [300, 200, 150],
    'Product 2 Sales': [400, 500, 300],
    'Product 1 Profit': [30, 20, 15],
    'Product 2 Profit': [40, 50, 30]
})

print(df)

输出结果如下:

  Supermarket  Product 1 Sales  Product 2 Sales  Product 1 Profit  Product 2 Profit
0           A              300              400                30                40
1           B              200              500                20                50
2           C              150              300                15                30

现在我们想要将‘Product 1 Sales’、‘Product 2 Sales’、‘Product 1 Profit’和‘Product 2 Profit’这四列数据合并为一列,我们可以使用melt()函数和concat()函数来实现,代码如下:

melted_df = pd.melt(df, id_vars=['Supermarket'], var_name='Sales/Profit', value_name='Value')
melted_df['Metric'] = ['Sales' if 'Sales' in x else 'Profit' for x in melted_df['Sales/Profit']]

pivot_df = pd.pivot_table(melted_df, values='Value', index=['Supermarket', 'Metric'], columns='Sales/Profit').reset_index()

final_df = pd.concat([pivot_df[['Supermarket', 'Metric']], pivot_df.iloc[:, 2:].rename(columns=lambda x: x.split()[0])], axis=1)

print(final_df)

输出结果如下:

  Supermarket  Metric  Product 1  Product 2
0           A   Sales        300        400
1           A  Profit         30         40
2           B   Sales        200        500
3           B  Profit         20         50
4           C   Sales        150        300
5           C  Profit         15         30

示例二:

假设我们有如下的DataFrame对象,记录了学生的姓名、科目和成绩:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Math': [90, 80, 85],
    'Physics': [80, 75, 90],
    'Chemistry': [85, 90, 80]
})

print(df)

输出结果如下:

      Name  Math  Physics  Chemistry
0    Alice    90       80         85
1      Bob    80       75         90
2  Charlie    85       90         80

现在我们想要将‘Math’、‘Physics’和‘Chemistry’这三列数据合并为一列,我们可以使用melt()函数和concat()函数来实现,代码如下:

melted_df = pd.melt(df, id_vars=['Name'], var_name='Subject', value_name='Score')

final_df = pd.concat([melted_df[['Name', 'Subject']], melted_df[['Score']].rename(columns={'Score': 'Value'})], axis=1)

print(final_df)

输出结果如下:

       Name    Subject  Value
0     Alice       Math     90
1       Bob       Math     80
2   Charlie       Math     85
3     Alice    Physics     80
4       Bob    Physics     75
5   Charlie    Physics     90
6     Alice  Chemistry     85
7       Bob  Chemistry     90
8   Charlie  Chemistry     80

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas将DataFrame的几列数据合并成为一列 - Python技术站

(1)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • NumPy 数组的形状和维度详解

    NumPy中数组的形状和维度是什么? 形状和维度是NumPy数组的一个非常重要的概念,它们描述了NumPy数组中元素的排列方式。 其中: 形状描述的是数组中每个维度的大小,以一个元组形式表示。例如,一个二维数组的形状可以表示为(3,4),表示它有3行和4列。 维度是描述的是数组中的轴数。例如,一个一维数组有一个轴,一个二维数组有两个轴,一个三维数组有三个轴,…

    2023年2月28日
    00
  • Python Numpy实现计算矩阵的均值和标准差详解

    以下是关于“Python Numpy实现计算矩阵的均值和标准差详解”的完整攻略。 背景 在数据分析和机器学习中,计算矩阵的均值和标准差是非常常的操作。NumPy是Python中常用的科学计算库,可以用于处理大量数值。本攻略将介绍如何使用NumPy算矩阵的均值和标准差,并提供两个示例来演示如何使用这些方法。 计算矩阵的均值 可以NumPy计算矩阵的均值。可以使…

    python 2023年5月14日
    00
  • 浅析关于Keras的安装(pycharm)和初步理解

    1. PyTorch中Tensor的数据类型 在PyTorch中,Tensor是最基本的数据类型,它是一个多维数组。Tensor可以是标量、向量、矩阵或任意维度的数组。在PyTorch中,Tensor有多种数据类型,包括: torch.FloatTensor:32位浮点数 torch.DoubleTensor:64位浮点数 torch.HalfTensor:…

    python 2023年5月14日
    00
  • TensorFlow索引与切片的实现方法

    以下是TensorFlow索引与切片的实现方法的完整攻略,包括两个示例: TensorFlow索引与切片的实现方法 步骤1:导入必要的库 首先,需要导入必要的库,包括tensorflow和numpy。可以使用以下代码导入这些库: import tensorflow as tf import numpy as np 步骤2:创建张量 接下来,需要创建张量。可以…

    python 2023年5月14日
    00
  • Python Flask搭建yolov3目标检测系统详解流程

    Python Flask 搭建 YOLOv3 目标检测系统详解流程 简介 YOLOv3 是一种目标检测算法,可以用于检测图像或视频中的物体。本攻略将介绍如何使用 Python Flask 搭建 YOLOv3 目标检测系统,包括如何使用 Flask 和 YOLOv3 进行示例说明。 环境准备 在开始之前,我们需要准备以下环境: Python 3.x Flask…

    python 2023年5月14日
    00
  • 机器学习之KNN算法原理及Python实现方法详解

    机器学习之KNN算法原理及Python实现方法详解 KNN算法是一种常用的机器学习算法,它可以用于分类和回归问题。在本攻略中,我们将介绍KNN算法原理和Python实现方法,并提供两个示例。 KNN算法原理 KNN算法的原理是基于样本之间距离来进行分类或回归。在分类问题中,KNN算法将新样本与训练集中的所有样本进行距离计算,并距离最近的K个样本作为邻居。然后…

    python 2023年5月14日
    00
  • numpy.ndarray 实现对特定行或列取值

    以下是numpy.ndarray实现对特定行或列取值的攻略: numpy.ndarray实现对特定行或列取值 在NumPy中,可以使用切片和索引来实现对特定行或列取值。以下是一些示例: 对特定行取值 可以使用切片来对特定行取值。以下是一个示例: import numpy as np a = np.array([[1, 2, 3], [4, 5, 6], [7…

    python 2023年5月14日
    00
  • python将红底证件照转成蓝底的实现方法

    将红底证件照转成蓝底是一种常见的图像处理技术,可以用于证件照的制作和美化。在Python中,可以使用OpenCV库来实现这个功能。以下是将红底证件照转成蓝底的完整攻略,包括代码实现的步骤和示例说明: 导入库 import cv2 import numpy as np 这个示例中,我们导入了OpenCV和NumPy库。 读取图像 img = cv2.imrea…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部