如何用Pandas的melt函数将多列合并为一列且不含原列名?
问题描述
我有一个包含多列的Pandas DataFrame,希望用melt函数将所有列扁平化为一列,且新DataFrame中不包含原数据的列名。以下是示例数据、现有代码及期望输出,能否简化现有代码?
示例数据
date Col1 Col2 Col3 Col4 1990-01-02 12:00:00 24 24 24.8 24.8 1990-01-02 01:00:00 59 58 60 60.3 1990-01-02 02:00:00 43.7 43.9 48 49
期望输出
Rates 0 24 1 59 2 43.7 3 24 4 58 5 43.9 6 24.8 7 60 8 48 9 24.8 10 60.3 11 49
现有代码
df = df.melt(var_name='ColumnNames', value_name='Rates') # 使用melt扁平化列 df_main.drop(['ColumnNames'], axis = 1, inplace = True) # 删除'ColumnNames'列
简化方案
可以直接在melt中指定id_vars为空列表,同时仅设置value_name,这样不会生成存放原列名的列,一步到位得到目标结果:
df = df.melt(id_vars=[], value_name='Rates')
注意:如果你的DataFrame包含date列(示例数据中有该列,但期望输出未保留),需要先排除date列,仅对数值列进行扁平化操作:
# 仅处理Col1-Col4,排除date列 df = df.melt(id_vars=['date'], value_name='Rates').drop('date', axis=1)
从期望输出的结果来看,第一种写法更贴合需求,无需额外执行删除列的操作,直接生成仅包含Rates列的DataFrame。
内容的提问来源于stack exchange,提问作者A Newbie
相关产品推荐
相关产品推荐

