Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python数据框架:将列转换为行_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x Python数据框架:将列转换为行

Python 3.x Python数据框架:将列转换为行,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个如下的数据帧 d = {'Movie' : ['The Shawshank Redemption', 'The Godfather'], 'FirstName1': ['Tim', 'Marlon'], 'FirstName2': ['Morgan', 'Al'], 'LastName1': ['Robbins', 'Brando'], 'LastName2': ['Freeman', 'Pacino'],

我有一个如下的数据帧

d = {'Movie' : ['The Shawshank Redemption', 'The Godfather'],
        'FirstName1': ['Tim', 'Marlon'],
        'FirstName2': ['Morgan', 'Al'],
        'LastName1': ['Robbins', 'Brando'],
        'LastName2': ['Freeman', 'Pacino'],
        'ID1': ['TM', 'MB'],
        'ID2': ['MF', 'AP']
        }
df = pd.DataFrame(d)
df
select Movie as Movie, FirstName1 as FirstName, LastName1 as LastName, ID1 as ID from table
union
select Movie as Movie, FirstName2 as FirstName, LastName2 as LastName, ID2 as ID from table

我想把它重新排列成一个4列的数据框, 通过将
Firstname1、LastName1、FirstName2、LastName2、ID1、ID2
转换为3列行作为
FirstName、LastName、ID
,列
movie
重复如下操作。

sql
中,我们按如下方式执行

d = {'Movie' : ['The Shawshank Redemption', 'The Godfather'],
        'FirstName1': ['Tim', 'Marlon'],
        'FirstName2': ['Morgan', 'Al'],
        'LastName1': ['Robbins', 'Brando'],
        'LastName2': ['Freeman', 'Pacino'],
        'ID1': ['TM', 'MB'],
        'ID2': ['MF', 'AP']
        }
df = pd.DataFrame(d)
df
select Movie as Movie, FirstName1 as FirstName, LastName1 as LastName, ID1 as ID from table
union
select Movie as Movie, FirstName2 as FirstName, LastName2 as LastName, ID2 as ID from table

我们能用pandas实现吗?

我认为一个简单的方法是使用pandas的复制功能。 您可以将“Movie”、“FirstName”、“LastName”、“ID”列复制到新表中。然后删除第一列中不需要的列。您还可以为另一个创建新表

new = d['Movie', 'FirstName', 'LastName', 'ID].copy
使用多索引的功能!使用创建一个
DataFrame
,其中有一列名,分为FirstName1和FirstName2(见下文),ID和LastName类似。使用此选项,可以将其分别转换为行。执行此操作之前,请将
Movie
设置为索引,以将其从正在执行的操作中排除。您可以使用列来恢复所有内容,但我不确定您是否需要


堆栈之前

#                         FirstName         LastName           ID    
#                                 1       2        1        2   1   2
#Movie                                                               
#The Shawshank Redemption       Tim  Morgan  Robbins  Freeman  TM  MF
#The Godfather               Marlon      Al   Brando   Pacino  MB  AP

如果可能,列名称中的数字更像
9
用于获取值在to
MultiIndex
to列之前的整数,因此可能:

如果不使用索引获取列名称的最后一个值,则使用所有“上一个”和“传递给”:

请尝试以下内容:

d1 = df.filter(regex="1$|Movie").rename(columns=lambda x: x[:-1])
d2 = df.filter(regex="2$|Movie").rename(columns=lambda x: x[:-1])
pd.concat([d1, d2]).rename({'Movi':'Movie'})
d1 = df.filter(regex="1$|Movie").rename(columns=lambda x: x[:-1])
d2 = df.filter(regex="2$|Movie").rename(columns=lambda x: x[:-1])
pd.concat([d1, d2]).rename({'Movi':'Movie'})