Python 使用现有数据帧中的值创建新数据帧

Python 使用现有数据帧中的值创建新数据帧,python,pandas,dataframe,melt,Python,Pandas,Dataframe,Melt,假设上面的数据框架有几个这样的行和列,每个季度每个员工都有输出。 我想创建一个包含列的新数据框: exdf = pd.DataFrame({'Employee name': ['Alex','Mike'], '2014.1': [5, 2], '2014.2': [3, 4], '2014.3': [3, 6], '2014.4': [4, 3], '2015.1': [7, 5], '2015.2': [5, 4]}) exdf Employee name 2014.1 2014

假设上面的数据框架有几个这样的行和列,每个季度每个员工都有输出。 我想创建一个包含列的新数据框:

exdf = pd.DataFrame({'Employee name': ['Alex','Mike'],
 '2014.1': [5, 2], '2014.2': [3, 4], '2014.3': [3, 6], '2014.4': [4, 3], '2015.1': [7, 5], '2015.2': [5, 4]})
exdf


  Employee name  2014.1  2014.2  2014.3  2014.4  2015.1  2015.2
0          Alex       5       3       3       4       7       5
1          Mike       2       4       6       3       5       4
所以,新数据帧将有nxm行,其中n和m是原始数据帧中的行和列。 我尝试的是使用嵌套for循环填充每一行和每一列条目

但我相信有一种更有效的方法

newdf=pd.Dataframe(columns=['Employee name','Year','Quarter','Output'])
与一起使用,列的最后更改顺序:

for i in range(df.shape[0]):
    for j in range(df.shape[1]):
        newdf.iloc[?]=exdf.iloc[?]

与一起使用,列的最后更改顺序:

for i in range(df.shape[0]):
    for j in range(df.shape[1]):
        newdf.iloc[?]=exdf.iloc[?]

使用将列转换为a,然后使用这些列获得最终输出

df = exdf.melt('Employee name', var_name='Year', value_name='Output')
df[['Year', 'Quarter']] = df['Year'].str.split('.', expand=True)
df = df[['Employee name','Year','Quarter','Output']]
print (df)
   Employee name  Year Quarter  Output
0           Alex  2014       1       5
1           Mike  2014       1       2
2           Alex  2014       2       3
3           Mike  2014       2       4
4           Alex  2014       3       3
5           Mike  2014       3       6
6           Alex  2014       4       4
7           Mike  2014       4       3
8           Alex  2015       1       7
9           Mike  2015       1       5
10          Alex  2015       2       5
11          Mike  2015       2       4
使用将列转换为a,然后使用这些列获得最终输出

df = exdf.melt('Employee name', var_name='Year', value_name='Output')
df[['Year', 'Quarter']] = df['Year'].str.split('.', expand=True)
df = df[['Employee name','Year','Quarter','Output']]
print (df)
   Employee name  Year Quarter  Output
0           Alex  2014       1       5
1           Mike  2014       1       2
2           Alex  2014       2       3
3           Mike  2014       2       4
4           Alex  2014       3       3
5           Mike  2014       3       6
6           Alex  2014       4       4
7           Mike  2014       4       3
8           Alex  2015       1       7
9           Mike  2015       1       5
10          Alex  2015       2       5
11          Mike  2015       2       4