关键词

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

本文链接:http://task.lmcjl.com/news/16978.html

展开阅读全文