Skip to main content
 首页 » 编程设计

python之仅将某些列 reshape 为单个列

2025年05月04日15pander-it

import pandas as pd 
from datetime import datetime 
 
df = pd.DataFrame({'origin': ['japan', 'japan','japan','japan'], 
                       'pastime': ['baseball', 'sumo', 'keirin', 'football'], 
                       datetime(2000,1,1) : [4,5,4,5], 
                   datetime(2005,1,1) : [4, 3, 2, 1], 
                   datetime(2010,1,1) : [4, 2, 2, 1] 
                  }) 

我的数据框有很多带有日期标签的列:

Index(['origin','pastime', 2000-01-01 00:00:00, 
       2005-01-01 00:00:00, 2010-01-01 00:00:00], 
      dtype='object') 

我想 reshape 数据框以包含列:origin, pastime, date, value

第一个条目行的位置:

origin = japan 
pastime = baseball 
date = 2001-01-01 
value = 4 

我见过使用 stack 将列作为索引推送到行中的示例,但在我的例子中,它也将“origin”和“pastime”列向下推送。

我将如何进行这种转换?

请您参考如下方法:

我认为您正在寻找melt:

df.melt(['origin', 'pastime'], var_name='date') 
 
   origin   pastime       date  value 
0   japan  baseball 2005-01-01      4 
1   japan      sumo 2005-01-01      3 
2   japan    keirin 2005-01-01      2 
3   japan  football 2005-01-01      1 
4   japan  baseball 2010-01-01      4 
5   japan      sumo 2010-01-01      2 
6   japan    keirin 2010-01-01      2 
7   japan  football 2010-01-01      1 
8   japan  baseball 2000-01-01      4 
9   japan      sumo 2000-01-01      5 
10  japan    keirin 2000-01-01      4 
11  japan  football 2000-01-01      5