将 DataFrame 中的几列数据合并成为一列,可以使用 pandas 库中的 melt()
函数实现。
melt()
函数用于将 DataFrame 中宽格式的数据转换为长格式,使数据更容易进行分析和处理。其常用的参数有:
id_vars
:需要保留的列名或列索引,转换后的新列依然以这些列作为标识符。默认值为None
,表示所有列都需要被保留。value_vars
:需要被转换成值的列名或列索引。默认值为None
,表示所有列都需要被转换。var_name
:转换后新生成的变量列的列名。默认值为 “variable”。value_name
:转换后新生成的值列的列名。默认值为 “value”。
示例 1:
假设有如下的 DataFrame:
import pandas as pd
df = pd.DataFrame({
'id': [1, 2, 3],
'name': ['Tom', 'Jerry', 'Alice'],
'score1': [80, 90, 70],
'score2': [84, 92, 76],
'score3': [88, 94, 72]
})
其中,id
和 name
列为标识符,score1
、score2
、score3
列为需要被合并的列。
要将 score1
、score2
、score3
列合并成一个新的列,并且新列的名称为 scores
,则可以使用如下代码:
df_melted = df.melt(id_vars=['id', 'name'], value_vars=['score1', 'score2', 'score3'], var_name='score_type', value_name='score')
id_vars
参数指定了需要保留的列为 id
和 name
,value_vars
参数指定了需要被合并的列为 score1
、score2
和 score3
,var_name
参数指定了生成新列的列名为 score_type
,value_name
参数指定了生成新值列的列名为 score
。
生成的新 DataFrame 如下所示:
id name score_type score
0 1 Tom score1 80
1 2 Jerry score1 90
2 3 Alice score1 70
3 1 Tom score2 84
4 2 Jerry score2 92
5 3 Alice score2 76
6 1 Tom score3 88
7 2 Jerry score3 94
8 3 Alice score3 72
新 DataFrame 中,id
和 name
列作为标识符被保留下来,而 score1
、score2
、score3
列被合并成了 score_type
列,其对应的值被放在了 score
列中。
示例 2:
假设有如下的 DataFrame:
import pandas as pd
df = pd.DataFrame({
'id': [1, 2, 3],
'name': ['Tom', 'Jerry', 'Alice'],
'city': ['Beijing', 'Shanghai', 'Guangzhou'],
'gender': ['male', 'male', 'female']
})
其中,id
和 name
列为标识符,city
和 gender
列为需要被合并的列。
要将 city
和 gender
列合并成一个新的列,并且新列的名称为 info
,则可以使用如下代码:
df_melted = df.melt(id_vars=['id', 'name'], value_vars=['city', 'gender'], var_name='info_type', value_name='info')
生成的新 DataFrame 如下所示:
id name info_type info
0 1 Tom city Beijing
1 2 Jerry city Shanghai
2 3 Alice city Guangzhou
3 1 Tom gender male
4 2 Jerry gender male
5 3 Alice gender female
新 DataFrame 中,id
和 name
列作为标识符被保留下来,而 city
和 gender
列被合并成了 info_type
列,其对应的值被放在了 info
列中。