要将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