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日

相关文章

  • 编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录

    当你在编译pycaffe时,如果出现错误消息“fatal error: numpy/arrayobject.h: No such file or directory”,那么可能是因为缺少NumPy Python库或Python库路径未正确设置。下面是完整的攻略: 步骤1:安装NumPy库 在Ubuntu上,你可以使用以下命令安装NumPy: sudo apt…

    python 2023年5月14日
    00
  • tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解

    tensorflowdataset.shuffle、dataset.batch、dataset.repeat顺序区别详解 在使用TensorFlow进行数据处理时,我们通常需要使用tf.data.Dataset API来构建数据管道。其中,shuffle、batch和repeat是三个常用的函数,它们的顺序对数据处理的结果有很大的影响。本攻略将详细讲解这三个…

    python 2023年5月14日
    00
  • python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别详解

    以下是关于“Python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别详解”的完整攻略。 背景 在Python中,有三种常用的乘法运算分别是np.multiply()、np.dot()和星号(*)。这三乘法运算在使用时需要其区别。本攻略将详细介这三种乘法运算的区别。 np.multiply()函数 np.multiply()函数…

    python 2023年5月14日
    00
  • python numpy中mat和matrix的区别

    以下是关于“Python numpy中mat和matrix的区别”的完整攻略。 背景 在numpy中,我们可以使用mat和matrix来创建矩阵。这两个看起来很相似,但实际上它们有一些区别。本攻略将介绍mat和matrix的区别,并提供两个示例来演示如何使用mat和matrix函数。 区别 mat和matrix都可以用来创建矩阵,但是它们有一些区别: mat…

    python 2023年5月14日
    00
  • Pycharm虚拟环境pip时报错:no suchoption:–bulid-dir的解决办法

    在使用PyCharm虚拟环境pip时,有时会遇到错误提示“no such option: –build-dir”。这可能是由于pip版本不兼容或其他原因导致的。本文将详细讲解如何解决这个问题,并提供两个示例说明。 升级pip版本 在PyCharm虚拟环境中,我们可以尝试升级pip版本来解决“no such option: –build-dir”错误。可以…

    python 2023年5月14日
    00
  • pytorch下大型数据集(大型图片)的导入方式

    当处理大型数据集时,使用适当的数据导入方式是非常重要的,可以提高训练速度和效果。在PyTorch中,我们可以使用以下方式导入大型数据集(例如大型图片数据集): 使用torchvision.datasets.ImageFolder torchvision包提供了许多实用的函数和类,其中ImageFolder就是处理大型图片数据集的一种方法。该方法将数据集按照类…

    python 2023年5月13日
    00
  • python3利用Dlib19.7实现人脸68个特征点标定

    Python3利用Dlib19.7实现人脸68个特征点标定 简介 本篇攻略将介绍如何使用Python3和Dlib19.7库实现人脸68个特征点标定。Dlib是一个非常强大的机器视觉工具集,其中包含了一些实现基础人脸识别、人脸对齐和特征点检测等功能的算法。本文将使用其中的特征点检测算法,实现68个特征点的标定。首先,需要准备依赖环境。 设计思路 要实现人脸68…

    python 2023年5月14日
    00
  • 十分钟利用Python制作属于你自己的个性logo

    十分钟利用Python制作属于你自己的个性logo Python是一种强大的编程语言,可以用于各种用途,包括制作个性化的logo。本攻略将介绍如何利用Python制作属于你自己的个性logo,包括如何使用turtle模块和如何使用Pillow模块。 使用turtle模块 turtle模块是Python中用于绘制图形的模块,可以用于制作各种类型的图形,包括lo…

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