在Pandas中,如果你想在维护其他列的同时,将多列堆叠到单个列中,可以使用pd.melt()
函数或者DataFrame.stack()
方法。以下是两种方法的详细说明和示例代码。
pd.melt()
pd.melt()
函数可以将宽格式的数据转换为长格式,即将多列堆叠到单个列中。
import pandas as pd
# 创建一个示例DataFrame
data = {
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie'],
'Score1': [85, 90, 78],
'Score2': [88, 92, 80]
}
df = pd.DataFrame(data)
# 使用pd.melt()将多列堆叠到单个列中
stacked_df = pd.melt(df, id_vars=['ID', 'Name'], value_vars=['Score1', 'Score2'],
var_name='ScoreType', value_name='Score')
print(stacked_df)
ID Name ScoreType Score
0 1 Alice Score1 85
1 2 Bob Score1 90
2 3 Charlie Score1 78
3 1 Alice Score2 88
4 2 Bob Score2 92
5 3 Charlie Score2 80
DataFrame.stack()
DataFrame.stack()
方法可以将列堆叠成Series,形成一个Series的索引为多级索引。
import pandas as pd
# 创建一个示例DataFrame
data = {
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie'],
'Score1': [85, 90, 78],
'Score2': [88, 92, 80]
}
df = pd.DataFrame(data)
# 使用DataFrame.stack()将多列堆叠到单个列中
stacked_df = df.set_index(['ID', 'Name']).stack().reset_index()
stacked_df.columns = ['ID', 'Name', 'ScoreType', 'Score']
print(stacked_df)
ID Name ScoreType Score
0 1 Alice Score1 85
1 1 Alice Score2 88
2 2 Bob Score1 90
3 2 Bob Score2 92
4 3 Charlie Score1 78
5 3 Charlie Score2 80
这两种方法在处理需要将多列数据转换为长格式的场景中非常有用,例如:
pd.melt()
或DataFrame.stack()
时,指定的列名与DataFrame中的列名完全匹配。astype()
方法进行类型转换。例如:astype()
方法进行类型转换。例如:DataFrame.stack()
时,索引可能会变得复杂。可以使用reset_index()
方法重置索引。通过以上方法和示例代码,你应该能够在Pandas中成功地将多列堆叠到单个列中,同时维护其他列的数据。
领取专属 10元无门槛券
手把手带您无忧上云